A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
test-cosine-antenna.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011 CTTC
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Author: Nicola Baldo <nbaldo@cttc.es>
18 */
19
20#include <ns3/cosine-antenna-model.h>
21#include <ns3/double.h>
22#include <ns3/log.h>
23#include <ns3/simulator.h>
24#include <ns3/test.h>
25
26#include <cmath>
27#include <iostream>
28#include <sstream>
29#include <string>
30
31using namespace ns3;
32
33NS_LOG_COMPONENT_DEFINE("TestCosineAntennaModel");
34
41{
42 EQUAL = 0,
43 LESSTHAN = 1
44};
45
52{
53 public:
62 static std::string BuildNameString(Angles a, double b, double o, double g);
73 double b,
74 double o,
75 double g,
76 double expectedGainDb,
78
79 private:
80 void DoRun() override;
82 double m_b;
83 double m_o;
84 double m_g;
87};
88
89std::string
91{
92 std::ostringstream oss;
93 oss << "theta=" << a.GetInclination() << " , phi=" << a.GetAzimuth() << ", beamdwidth=" << b
94 << "deg"
95 << ", orientation=" << o << ", maxGain=" << g << " dB";
96 return oss.str();
97}
98
100 double b,
101 double o,
102 double g,
103 double expectedGainDb,
105 : TestCase(BuildNameString(a, b, o, g)),
106 m_a(a),
107 m_b(b),
108 m_o(o),
109 m_g(g),
110 m_expectedGain(expectedGainDb),
111 m_cond(cond)
112{
113}
114
115void
117{
119
120 Ptr<CosineAntennaModel> a = CreateObject<CosineAntennaModel>();
121 a->SetAttribute("HorizontalBeamwidth", DoubleValue(m_b));
122 a->SetAttribute("VerticalBeamwidth", DoubleValue(m_b));
123 a->SetAttribute("Orientation", DoubleValue(m_o));
124 a->SetAttribute("MaxGain", DoubleValue(m_g));
125 double actualGain = a->GetGainDb(m_a);
126 switch (m_cond)
127 {
128 case EQUAL:
129 NS_TEST_EXPECT_MSG_EQ_TOL(actualGain,
131 0.001,
132 "wrong value of the radiation pattern");
133 break;
134 case LESSTHAN:
135 NS_TEST_EXPECT_MSG_LT(actualGain, m_expectedGain, "gain higher than expected");
136 break;
137 default:
138 break;
139 }
140}
141
148{
149 public:
151};
152
154 : TestSuite("cosine-antenna-model", UNIT)
155{
156 // to calculate the azimut angle offset for a given gain in db:
157 // phideg = (2*acos(10^(targetgaindb/(20*n))))*180/pi
158 // e.g., with a 60 deg beamwidth, gain is -20dB at +- 74.945 degrees from boresight
159
160 // phi, theta, beamwidth,
161 // orientation, maxGain,
162 // expectedGain, condition
164 60,
165 0,
166 0,
167 0,
168 EQUAL),
171 60,
172 0,
173 0,
174 -3,
175 EQUAL),
178 60,
179 0,
180 0,
181 -3,
182 EQUAL),
185 60,
186 0,
187 0,
188 -20,
189 LESSTHAN),
192 60,
193 0,
194 0,
195 -20,
196 LESSTHAN),
199 60,
200 0,
201 0,
202 -20,
203 LESSTHAN),
206 60,
207 0,
208 0,
209 -20,
210 LESSTHAN),
213 60,
214 0,
215 0,
216 -20,
217 LESSTHAN),
220 60,
221 0,
222 0,
223 -20,
224 LESSTHAN),
227 60,
228 0,
229 0,
230 -20,
231 LESSTHAN),
234 60,
235 0,
236 0,
237 -20,
238 LESSTHAN),
240
241 // test positive orientation
243 60,
244 60,
245 0,
246 0,
247 EQUAL),
250 60,
251 60,
252 0,
253 -3,
254 EQUAL),
257 60,
258 60,
259 0,
260 -3,
261 EQUAL),
264 60,
265 60,
266 0,
267 -20,
268 LESSTHAN),
271 60,
272 60,
273 0,
274 -20,
275 LESSTHAN),
278 60,
279 60,
280 0,
281 -20,
282 LESSTHAN),
285 60,
286 60,
287 0,
288 -20,
289 LESSTHAN),
292 60,
293 60,
294 0,
295 -20,
296 LESSTHAN),
299 60,
300 60,
301 0,
302 -20,
303 LESSTHAN),
306 60,
307 60,
308 0,
309 -20,
310 LESSTHAN),
313 60,
314 60,
315 0,
316 -20,
317 LESSTHAN),
319
320 // test negative orientation and different beamwidths
321 // with a 100 deg beamwidth, gain is -20dB at +- 117.47 degrees from boresight
323 100,
324 -150,
325 0,
326 0,
327 EQUAL),
330 100,
331 -150,
332 0,
333 -3,
334 EQUAL),
337 100,
338 -150,
339 0,
340 -3,
341 EQUAL),
345 100,
346 -150,
347 0,
348 -20,
349 EQUAL),
353 100,
354 -150,
355 0,
356 -20,
357 EQUAL),
360 100,
361 -150,
362 0,
363 -20,
364 LESSTHAN),
367 100,
368 -150,
369 0,
370 -20,
371 LESSTHAN),
374 100,
375 -150,
376 0,
377 -20,
378 LESSTHAN),
381 100,
382 -150,
383 0,
384 -20,
385 LESSTHAN),
388 100,
389 -150,
390 0,
391 -20,
392 LESSTHAN),
394 // with a 150 deg beamwidth, gain is -10dB at +- 124.93 degrees from boresight, and -20dB at +-
395 // 155.32 degrees from boresight
397 150,
398 -150,
399 0,
400 0,
401 EQUAL),
404 150,
405 -150,
406 0,
407 -3,
408 EQUAL),
411 150,
412 -150,
413 0,
414 -3,
415 EQUAL),
419 150,
420 -150,
421 0,
422 -10,
423 EQUAL),
427 150,
428 -150,
429 0,
430 -10,
431 EQUAL),
435 150,
436 -150,
437 0,
438 -20,
439 EQUAL),
443 150,
444 -150,
445 0,
446 -20,
447 EQUAL),
450 150,
451 -150,
452 0,
453 -20,
454 LESSTHAN),
457 150,
458 -150,
459 0,
460 -20,
461 LESSTHAN),
463 // test flat beam, with beamwidth=360 deg
465 360,
466 0,
467 0,
468 0,
469 EQUAL),
472 360,
473 0,
474 0,
475 0,
476 EQUAL),
479 360,
480 0,
481 0,
482 0,
483 EQUAL),
486 360,
487 0,
488 0,
489 0,
490 EQUAL),
493 360,
494 0,
495 0,
496 0,
497 EQUAL),
499
500 // test maxGain
502 60,
503 0,
504 10,
505 10,
506 EQUAL),
509 60,
510 0,
511 22,
512 19,
513 EQUAL),
516 60,
517 0,
518 -4,
519 -7,
520 EQUAL),
523 60,
524 0,
525 10,
526 -10,
527 LESSTHAN),
530 60,
531 0,
532 -20,
533 -40,
534 LESSTHAN),
537 60,
538 0,
539 40,
540 20,
541 LESSTHAN),
544 100,
545 -150,
546 2,
547 2,
548 EQUAL),
551 100,
552 -150,
553 4,
554 1,
555 EQUAL),
558 100,
559 -150,
560 -1,
561 -4,
562 EQUAL),
564
565 // test elevation angle
567 60,
568 0,
569 0,
570 -3,
571 EQUAL),
574 60,
575 0,
576 0,
577 -6,
578 EQUAL),
581 60,
582 0,
583 0,
584 -6,
585 EQUAL),
588 60,
589 0,
590 0,
591 -20,
592 LESSTHAN),
595 60,
596 0,
597 0,
598 -20,
599 LESSTHAN),
602 60,
603 60,
604 0,
605 -3,
606 EQUAL),
609 60,
610 60,
611 0,
612 -6,
613 EQUAL),
616 60,
617 60,
618 0,
619 -6,
620 EQUAL),
624 60,
625 60,
626 0,
627 -20,
628 LESSTHAN),
632 100,
633 -150,
634 0,
635 -3,
636 EQUAL),
640 100,
641 -150,
642 0,
643 -6,
644 EQUAL),
648 100,
649 -150,
650 0,
651 -6,
652 EQUAL),
655 100,
656 -150,
657 0,
658 -20,
659 LESSTHAN),
662 60,
663 0,
664 10,
665 7,
666 EQUAL),
669 60,
670 0,
671 22,
672 16,
673 EQUAL),
676 60,
677 0,
678 -4,
679 -10,
680 EQUAL),
683 60,
684 0,
685 10,
686 -13,
687 LESSTHAN),
690 60,
691 0,
692 -20,
693 -43,
694 LESSTHAN),
697 60,
698 0,
699 40,
700 17,
701 LESSTHAN),
704 100,
705 -150,
706 2,
707 -1,
708 EQUAL),
711 100,
712 -150,
713 4,
714 -2,
715 EQUAL),
718 100,
719 -150,
720 -1,
721 -7,
722 EQUAL),
724}
725
CosineAntennaModel Test.
double m_expectedGain
Expected gain.
double m_b
Horizontal and Vertical Beamwidth.
CosineAntennaModelGainTestCondition m_cond
Test condition.
static std::string BuildNameString(Angles a, double b, double o, double g)
Build the test name.
void DoRun() override
Implementation to actually run this TestCase.
CosineAntennaModelTestCase(Angles a, double b, double o, double g, double expectedGainDb, CosineAntennaModelGainTestCondition cond)
Constructor.
CosineAntennaModel TestSuite.
Class holding the azimuth and inclination angles of spherical coordinates.
Definition: angles.h:118
double GetInclination() const
Getter for inclination angle.
Definition: angles.cc:246
double GetAzimuth() const
Getter for azimuth angle.
Definition: angles.cc:240
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:42
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
encapsulates test code
Definition: test.h:1060
@ QUICK
Fast test.
Definition: test.h:1065
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:301
A suite of tests to run.
Definition: test.h:1256
CosineAntennaModelGainTestCondition
Test condition (equal to or less than)
@ LESSTHAN
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_TEST_EXPECT_MSG_LT(actual, limit, msg)
Test that an actual value is less than a limit and report if not.
Definition: test.h:790
#define NS_TEST_EXPECT_MSG_EQ_TOL(actual, limit, tol, msg)
Test that actual and expected (limit) values are equal to plus or minus some tolerance and report if ...
Definition: test.h:510
Every class exported by the ns3 library is enclosed in the ns3 namespace.
double DegreesToRadians(double degrees)
converts degrees to radians
Definition: angles.cc:39
static CosineAntennaModelTestSuite g_staticCosineAntennaModelTestSuiteInstance
Static variable for test initialization.