A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
itu-r-1411-nlos-over-rooftop-test-suite.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Marco Miozzo <marco.miozzo@cttc.es>
7 * Nicola Baldo <nbaldo@cttc.es>
8 */
9
10#include <ns3/constant-position-mobility-model.h>
11#include <ns3/double.h>
12#include <ns3/enum.h>
13#include <ns3/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h>
14#include <ns3/log.h>
15#include <ns3/string.h>
16#include <ns3/test.h>
17
18using namespace ns3;
19
20NS_LOG_COMPONENT_DEFINE("ItuR1411NlosOverRooftopPropagationLossModelTest");
21
22/**
23 * @ingroup propagation-tests
24 *
25 * @brief ItuR1411NlosOverRooftopPropagationLossModel Test Case
26 *
27 */
29{
30 public:
31 /**
32 * Constructor
33 *
34 * @param freq carrier frequency in Hz
35 * @param dist 2D distance between UT and BS in meters
36 * @param hb height of BS in meters
37 * @param hm height of UT in meters
38 * @param env environment type
39 * @param city city type
40 * @param refValue reference loss value
41 * @param name TestCase name
42 */
44 double dist,
45 double hb,
46 double hm,
48 CitySize city,
49 double refValue,
50 std::string name);
52
53 private:
54 void DoRun() override;
55
56 /**
57 * Create a MobilityModel
58 * @param index mobility model index
59 * @return a new MobilityModel
60 */
62
63 double m_freq; //!< carrier frequency in Hz
64 double m_dist; //!< 2D distance between UT and BS in meters
65 double m_hb; //!< height of BS in meters
66 double m_hm; //!< height of UT in meters
67 EnvironmentType m_env; //!< environment type
68 CitySize m_city; //!< city type
69 double m_lossRef; //!< reference loss
70};
71
74 double dist,
75 double hb,
76 double hm,
78 CitySize city,
79 double refValue,
80 std::string name)
81 : TestCase(name),
82 m_freq(freq),
83 m_dist(dist),
84 m_hb(hb),
85 m_hm(hm),
86 m_env(env),
87 m_city(city),
88 m_lossRef(refValue)
89{
90}
91
96
97void
99{
100 NS_LOG_FUNCTION(this);
101
103 mma->SetPosition(Vector(0.0, 0.0, m_hb));
104
106 mmb->SetPosition(Vector(m_dist, 0.0, m_hm));
107
110 propagationLossModel->SetAttribute("Frequency", DoubleValue(m_freq));
111 propagationLossModel->SetAttribute("Environment", EnumValue(m_env));
112 propagationLossModel->SetAttribute("CitySize", EnumValue(m_city));
113
114 double loss = propagationLossModel->GetLoss(mma, mmb);
115
116 NS_LOG_INFO("Calculated loss: " << loss);
117 NS_LOG_INFO("Theoretical loss: " << m_lossRef);
118
119 NS_TEST_ASSERT_MSG_EQ_TOL(loss, m_lossRef, 0.1, "Wrong loss!");
120}
121
122/**
123 * @ingroup propagation-tests
124 *
125 * @brief ItuR1411NlosOverRooftopPropagationLossModel TestSuite
126 *
127 */
133
136 : TestSuite("itu-r-1411-nlos-over-rooftop", Type::SYSTEM)
137{
138 LogComponentEnable("ItuR1411NlosOverRooftopPropagationLossModelTest", LOG_LEVEL_ALL);
139
140 // reference values obtained with the octave scripts in src/propagation/test/reference/
142 2.1140e9,
143 900,
144 30,
145 1,
147 LargeCity,
148 143.68,
149 "f=2114Mhz, dist=900, urban large city"),
150 TestCase::Duration::QUICK);
152 1.865e9,
153 500,
154 30,
155 1,
157 LargeCity,
158 132.84,
159 "f=2114Mhz, dist=900, urban large city"),
160 TestCase::Duration::QUICK);
161}
162
163/// Static variable for test initialization
ItuR1411NlosOverRooftopPropagationLossModel Test Case.
Ptr< MobilityModel > CreateMobilityModel(uint16_t index)
Create a MobilityModel.
ItuR1411NlosOverRooftopPropagationLossModelTestCase(double freq, double dist, double hb, double hm, EnvironmentType env, CitySize city, double refValue, std::string name)
Constructor.
void DoRun() override
Implementation to actually run this TestCase.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition double.h:31
Hold variables of type enum.
Definition enum.h:52
Smart pointer class similar to boost::intrusive_ptr.
encapsulates test code
Definition test.h:1050
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Definition test.cc:292
A suite of tests to run.
Definition test.h:1267
Type
Type of test.
Definition test.h:1274
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition log.h:191
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition log.h:264
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Definition object.h:619
EnvironmentType
The type of propagation environment.
CitySize
The size of the city in which propagation takes place.
#define NS_TEST_ASSERT_MSG_EQ_TOL(actual, limit, tol, msg)
Test that actual and expected (limit) values are equal to plus or minus some tolerance and report and...
Definition test.h:327
static ItuR1411NlosOverRooftopPropagationLossModelTestSuite g_ituR1411NlosOverRooftopTestSuite
Static variable for test initialization.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void LogComponentEnable(const std::string &name, LogLevel level)
Enable the logging output associated with that log component.
Definition log.cc:291
@ LOG_LEVEL_ALL
Print everything.
Definition log.h:105