A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
lte-test-phy-error-model.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011-2013 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
11
12#include "ns3/boolean.h"
13#include "ns3/buildings-helper.h"
14#include "ns3/config.h"
15#include "ns3/double.h"
16#include "ns3/enum.h"
17#include "ns3/eps-bearer.h"
18#include "ns3/ff-mac-scheduler.h"
19#include "ns3/hybrid-buildings-propagation-loss-model.h"
20#include "ns3/integer.h"
21#include "ns3/log.h"
22#include "ns3/lte-enb-net-device.h"
23#include "ns3/lte-enb-phy.h"
24#include "ns3/lte-helper.h"
25#include "ns3/lte-ue-net-device.h"
26#include "ns3/lte-ue-phy.h"
27#include "ns3/lte-ue-rrc.h"
28#include "ns3/mobility-building-info.h"
29#include "ns3/mobility-helper.h"
30#include "ns3/net-device-container.h"
31#include "ns3/node-container.h"
32#include "ns3/object.h"
33#include "ns3/packet.h"
34#include "ns3/ptr.h"
35#include "ns3/radio-bearer-stats-calculator.h"
36#include "ns3/simulator.h"
37#include "ns3/spectrum-error-model.h"
38#include "ns3/spectrum-interference.h"
39#include "ns3/string.h"
40#include "ns3/test.h"
41
42#include <iostream>
43
44using namespace ns3;
45
46NS_LOG_COMPONENT_DEFINE("LteTestPhyErrorModel");
47
49 : TestSuite("lte-phy-error-model", Type::SYSTEM)
50{
51 NS_LOG_INFO("creating LenaTestPhyErrorModelTestCase");
52
53 for (uint32_t rngRun = 1; rngRun <= 3; ++rngRun)
54 {
55 // Tests on DL Control Channels (PCFICH+PDCCH)
56 // the tolerance is calculated with the following octave code:
57 //
58 // n = 1000; # TX packets
59 // for p=1-[0.007 0.045 0.206 0.343]
60 // tol = n*p - binoinv(0.001, n, p)
61 // endfor
62
63 // 1 interfering eNB SINR -2.0 BLER 0.007 TB size 217
64 AddTestCase(new LenaDlCtrlPhyErrorModelTestCase(2, 1078, 0.007, 9, Seconds(0.04), rngRun),
65 (rngRun == 1) ? TestCase::Duration::QUICK : TestCase::Duration::TAKES_FOREVER);
66 // 2 interfering eNBs SINR -4.0 BLER 0.037 TB size 217
67 AddTestCase(new LenaDlCtrlPhyErrorModelTestCase(3, 1040, 0.045, 21, Seconds(0.04), rngRun),
68 (rngRun == 1) ? TestCase::Duration::EXTENSIVE
69 : TestCase::Duration::TAKES_FOREVER);
70 // 3 interfering eNBs SINR -6.0 BLER 0.21 TB size 133
71 AddTestCase(new LenaDlCtrlPhyErrorModelTestCase(4, 1250, 0.206, 40, Seconds(0.12), rngRun),
72 (rngRun == 1) ? TestCase::Duration::EXTENSIVE
73 : TestCase::Duration::TAKES_FOREVER);
74 // 4 interfering eNBs SINR -7.0 BLER 0.34 TB size 133
75 AddTestCase(new LenaDlCtrlPhyErrorModelTestCase(5, 1260, 0.343, 47, Seconds(0.12), rngRun),
76 (rngRun == 1) ? TestCase::Duration::EXTENSIVE
77 : TestCase::Duration::TAKES_FOREVER);
78
79 // Tests on DL Data channels (PDSCH)
80 // the tolerance is calculated with the following octave code:
81 //
82 // n = 1000; # TX packets
83 // for p=1-[0.33 0.11 0.2 0.3 0.55 0.14]
84 // tol = n*p - binoinv(0.005, n, p)
85 // endfor
86
87 // MCS 2 TB size of 256 bits BLER 0.33 SINR -5.51
88 AddTestCase(new LenaDataPhyErrorModelTestCase(4, 1800, 0.33, 39, Seconds(0.04), rngRun),
89 (rngRun == 1) ? TestCase::Duration::QUICK : TestCase::Duration::TAKES_FOREVER);
90 // MCS 2 TB size of 528 bits BLER 0.11 SINR -5.51
91 AddTestCase(new LenaDataPhyErrorModelTestCase(2, 1800, 0.11, 26, Seconds(0.04), rngRun),
92 (rngRun == 1) ? TestCase::Duration::EXTENSIVE
93 : TestCase::Duration::TAKES_FOREVER);
94 // MCS 2 TB size of 1088 bits BLER 0.02 SINR -5.51
95 AddTestCase(new LenaDataPhyErrorModelTestCase(1, 1800, 0.02, 33, Seconds(0.04), rngRun),
96 (rngRun == 1) ? TestCase::Duration::EXTENSIVE
97 : TestCase::Duration::TAKES_FOREVER);
98 // MCS 12 TB size of 4800 bits BLER 0.3 SINR 4.43
99 AddTestCase(new LenaDataPhyErrorModelTestCase(1, 600, 0.3, 38, Seconds(0.04), rngRun),
100 (rngRun == 1) ? TestCase::Duration::EXTENSIVE
101 : TestCase::Duration::TAKES_FOREVER);
102 // MCS 12 TB size of 1632 bits BLER 0.55 SINR 4.43
103 AddTestCase(new LenaDataPhyErrorModelTestCase(3, 600, 0.55, 40, Seconds(0.04), rngRun),
104 (rngRun == 1) ? TestCase::Duration::EXTENSIVE
105 : TestCase::Duration::TAKES_FOREVER);
106 // MCS 16 TB size of 7272 bits (3648 x 3584) BLER 0.14 SINR 8.48
107 // BLER 0.14 = 1 - ((1-0.075)*(1-0.075))
108 AddTestCase(new LenaDataPhyErrorModelTestCase(1, 470, 0.14, 29, Seconds(0.04), rngRun),
109 (rngRun == 1) ? TestCase::Duration::EXTENSIVE
110 : TestCase::Duration::TAKES_FOREVER);
111 }
112}
113
114/**
115 * @ingroup lte-test
116 * Static variable for test initialization
117 */
119
120std::string
121LenaDataPhyErrorModelTestCase::BuildNameString(uint16_t nUser, uint16_t dist, uint32_t rngRun)
122{
123 std::ostringstream oss;
124 oss << "DataPhyErrorModel " << nUser << " UEs, distance " << dist << " m, RngRun " << rngRun;
125 return oss.str();
126}
127
129 uint16_t dist,
130 double blerRef,
131 uint16_t toleranceRxPackets,
132 Time statsStartTime,
133 uint32_t rngRun)
134 : TestCase(BuildNameString(nUser, dist, rngRun)),
135 m_nUser(nUser),
136 m_dist(dist),
137 m_blerRef(blerRef),
138 m_toleranceRxPackets(toleranceRxPackets),
139 m_statsStartTime(statsStartTime),
140 m_rngRun(rngRun)
141{
142}
143
147
148void
150{
151 SetDataDir(NS_TEST_SOURCEDIR);
152 double ber = 0.03;
153 Config::SetDefault("ns3::LteAmc::Ber", DoubleValue(ber));
154 Config::SetDefault("ns3::LteAmc::AmcModel", EnumValue(LteAmc::PiroEW2010));
155 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(false));
156 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(true));
157 Config::SetDefault("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue(false));
159
160 Config::SetDefault("ns3::RadioBearerStatsCalculator::DlRlcOutputFilename",
161 StringValue(CreateTempDirFilename("DlRlcStats.txt")));
162 Config::SetDefault("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename",
163 StringValue(CreateTempDirFilename("UlRlcStats.txt")));
164
165 // Disable Uplink Power Control
166 Config::SetDefault("ns3::LteUePhy::EnableUplinkPowerControl", BooleanValue(false));
167
168 /*
169 * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
170 */
171
172 int64_t stream = 1;
174
175 // Create Nodes: eNodeB and UE
176 NodeContainer enbNodes;
177 NodeContainer ueNodes;
178 enbNodes.Create(1);
179 ueNodes.Create(m_nUser);
180
181 // Install Mobility Model
182 MobilityHelper mobility;
183 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
184 mobility.Install(enbNodes);
185 BuildingsHelper::Install(enbNodes);
186 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
187 mobility.Install(ueNodes);
189
190 // remove random shadowing component
191 lena->SetAttribute("PathlossModel", StringValue("ns3::HybridBuildingsPropagationLossModel"));
192 lena->SetPathlossModelAttribute("ShadowSigmaOutdoor", DoubleValue(0.0));
193 lena->SetPathlossModelAttribute("ShadowSigmaIndoor", DoubleValue(0.0));
194 lena->SetPathlossModelAttribute("ShadowSigmaExtWalls", DoubleValue(0.0));
195
196 // Create Devices and install them in the Nodes (eNB and UE)
197 NetDeviceContainer enbDevs;
198 NetDeviceContainer ueDevs;
199 lena->SetSchedulerType("ns3::RrFfMacScheduler");
200 lena->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::PUSCH_UL_CQI));
201
202 enbDevs = lena->InstallEnbDevice(enbNodes);
203 stream += lena->AssignStreams(enbDevs, stream);
204 ueDevs = lena->InstallUeDevice(ueNodes);
205 stream += lena->AssignStreams(ueDevs, stream);
206
207 // Attach a UE to a eNB
208 lena->Attach(ueDevs, enbDevs.Get(0));
209
210 // Activate an EPS bearer
212 EpsBearer bearer(q);
213 lena->ActivateDataRadioBearer(ueDevs, bearer);
214
215 Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get(0)->GetObject<LteEnbNetDevice>();
216 Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy();
217 enbPhy->SetAttribute("TxPower", DoubleValue(43.0));
218 enbPhy->SetAttribute("NoiseFigure", DoubleValue(5.0));
219 // place the HeNB over the default rooftop level (20 mt.)
220 Ptr<MobilityModel> mm = enbNodes.Get(0)->GetObject<MobilityModel>();
221 mm->SetPosition(Vector(0.0, 0.0, 30.0));
222
223 // Set UEs' position and power
224 for (int i = 0; i < m_nUser; i++)
225 {
226 Ptr<MobilityModel> mm1 = ueNodes.Get(i)->GetObject<MobilityModel>();
227 mm1->SetPosition(Vector(m_dist, 0.0, 1.0));
228 Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get(i)->GetObject<LteUeNetDevice>();
229 Ptr<LteUePhy> uePhy = lteUeDev->GetPhy();
230 uePhy->SetAttribute("TxPower", DoubleValue(23.0));
231 uePhy->SetAttribute("NoiseFigure", DoubleValue(9.0));
232 }
233
234 Time statsDuration = Seconds(1);
235 Simulator::Stop(m_statsStartTime + statsDuration - Seconds(0.0001));
236
237 lena->EnableRlcTraces();
238 Ptr<RadioBearerStatsCalculator> rlcStats = lena->GetRlcStats();
239 rlcStats->SetAttribute("StartTime", TimeValue(m_statsStartTime));
240 rlcStats->SetAttribute("EpochDuration", TimeValue(statsDuration));
241
243
244 NS_LOG_INFO("\tTest downlink data shared channels (PDSCH)");
245 NS_LOG_INFO("Test with " << m_nUser << " user(s) at distance " << m_dist << " expected BLER "
246 << m_blerRef);
247 for (int i = 0; i < m_nUser; i++)
248 {
249 // get the imsi
250 uint64_t imsi = ueDevs.Get(i)->GetObject<LteUeNetDevice>()->GetImsi();
251 uint8_t lcId = 3;
252
253 double dlRxPackets = rlcStats->GetDlRxPackets(imsi, lcId);
254 double dlTxPackets = rlcStats->GetDlTxPackets(imsi, lcId);
255 double dlBler [[maybe_unused]] = 1.0 - (dlRxPackets / dlTxPackets);
256 double expectedDlRxPackets = dlTxPackets - dlTxPackets * m_blerRef;
257 NS_LOG_INFO("\tUser " << i << " imsi " << imsi << " DOWNLINK"
258 << " pkts rx " << dlRxPackets << " tx " << dlTxPackets << " BLER "
259 << dlBler << " Err " << std::fabs(m_blerRef - dlBler)
260 << " expected rx " << expectedDlRxPackets << " difference "
261 << std::abs(expectedDlRxPackets - dlRxPackets) << " tolerance "
263
264 // sanity check for whether the tx packets reported by the stats are correct
265 // we expect one packet per TTI
266 auto expectedDlTxPackets = static_cast<double>(statsDuration.GetMilliSeconds());
267 NS_TEST_ASSERT_MSG_EQ_TOL(dlTxPackets,
268 expectedDlTxPackets,
269 expectedDlTxPackets * 0.005,
270 " too different DL TX packets reported");
271
272 // this is the main test condition: check that the RX packets are within the expected range
273 NS_TEST_ASSERT_MSG_EQ_TOL(dlRxPackets,
274 expectedDlRxPackets,
276 " too different DL RX packets reported");
277 }
278
280}
281
282std::string
284{
285 std::ostringstream oss;
286 oss << "DlCtrlPhyErrorModel " << nEnb << " eNBs, distance " << dist << " m, RngRun " << rngRun;
287 return oss.str();
288}
289
291 uint16_t dist,
292 double blerRef,
293 uint16_t toleranceRxPackets,
294 Time statsStartTime,
295 uint32_t rngRun)
296 : TestCase(BuildNameString(nEnb, dist, rngRun)),
297 m_nEnb(nEnb),
298 m_dist(dist),
299 m_blerRef(blerRef),
300 m_toleranceRxPackets(toleranceRxPackets),
301 m_statsStartTime(statsStartTime),
302 m_rngRun(rngRun)
303{
304}
305
309
310void
312{
313 SetDataDir(NS_TEST_SOURCEDIR);
314
315 double ber = 0.03;
316 Config::SetDefault("ns3::LteAmc::Ber", DoubleValue(ber));
317 Config::SetDefault("ns3::LteAmc::AmcModel", EnumValue(LteAmc::PiroEW2010));
318 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(true));
319 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
320 Config::SetDefault("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue(false));
322
323 Config::SetDefault("ns3::RadioBearerStatsCalculator::DlRlcOutputFilename",
324 StringValue(CreateTempDirFilename("DlRlcStats.txt")));
325 Config::SetDefault("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename",
326 StringValue(CreateTempDirFilename("UlRlcStats.txt")));
327
328 // Disable Uplink Power Control
329 Config::SetDefault("ns3::LteUePhy::EnableUplinkPowerControl", BooleanValue(false));
330
331 /*
332 * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
333 */
334
335 int64_t stream = 1;
337
338 // Create Nodes: eNodeB and UE
339 NodeContainer enbNodes;
340 NodeContainer ueNodes;
341 enbNodes.Create(m_nEnb);
342 ueNodes.Create(1);
343
344 // Install Mobility Model
345 MobilityHelper mobility;
346 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
347 mobility.Install(enbNodes);
348 BuildingsHelper::Install(enbNodes);
349 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
350 mobility.Install(ueNodes);
352
353 // remove random shadowing component
354 lena->SetAttribute("PathlossModel", StringValue("ns3::HybridBuildingsPropagationLossModel"));
355 lena->SetPathlossModelAttribute("ShadowSigmaOutdoor", DoubleValue(0.0));
356 lena->SetPathlossModelAttribute("ShadowSigmaIndoor", DoubleValue(0.0));
357 lena->SetPathlossModelAttribute("ShadowSigmaExtWalls", DoubleValue(0.0));
358
359 // Create Devices and install them in the Nodes (eNB and UE)
360 NetDeviceContainer enbDevs;
361 NetDeviceContainer ueDevs;
362 lena->SetSchedulerType("ns3::RrFfMacScheduler");
363 lena->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::PUSCH_UL_CQI));
364
365 enbDevs = lena->InstallEnbDevice(enbNodes);
366 stream += lena->AssignStreams(enbDevs, stream);
367 ueDevs = lena->InstallUeDevice(ueNodes);
368 stream += lena->AssignStreams(ueDevs, stream);
369
370 // Attach a UE to one eNB (the others are interfering ones)
371 lena->Attach(ueDevs, enbDevs.Get(0));
372
373 // Activate an EPS bearer
375 EpsBearer bearer(q);
376 lena->ActivateDataRadioBearer(ueDevs, bearer);
377
378 // Set UEs' position and power
379 for (int i = 0; i < m_nEnb; i++)
380 {
381 // place the HeNB over the default rooftop level (20 mt.)
382 Ptr<MobilityModel> mm = enbNodes.Get(i)->GetObject<MobilityModel>();
383 mm->SetPosition(Vector(0.0, 0.0, 30.0));
384 Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get(i)->GetObject<LteEnbNetDevice>();
385 Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy();
386 enbPhy->SetAttribute("TxPower", DoubleValue(43.0));
387 enbPhy->SetAttribute("NoiseFigure", DoubleValue(5.0));
388 }
389
390 // Set UEs' position and power
391 Ptr<MobilityModel> mm = ueNodes.Get(0)->GetObject<MobilityModel>();
392 mm->SetPosition(Vector(m_dist, 0.0, 1.0));
393 Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get(0)->GetObject<LteUeNetDevice>();
394 Ptr<LteUePhy> uePhy = lteUeDev->GetPhy();
395 uePhy->SetAttribute("TxPower", DoubleValue(23.0));
396 uePhy->SetAttribute("NoiseFigure", DoubleValue(9.0));
397
398 Time statsDuration = Seconds(1);
399 Simulator::Stop(m_statsStartTime + statsDuration - Seconds(0.0001));
400
401 lena->EnableRlcTraces();
402 Ptr<RadioBearerStatsCalculator> rlcStats = lena->GetRlcStats();
403 rlcStats->SetAttribute("StartTime", TimeValue(m_statsStartTime));
404 rlcStats->SetAttribute("EpochDuration", TimeValue(statsDuration));
405
407
408 NS_LOG_INFO("\tTest downlink control channels (PCFICH+PDCCH)");
409 NS_LOG_INFO("Test with " << m_nEnb << " eNB(s) at distance " << m_dist << " expected BLER "
410 << m_blerRef);
411 int nUser = 1;
412 for (int i = 0; i < nUser; i++)
413 {
414 // get the imsi
415 uint64_t imsi = ueDevs.Get(i)->GetObject<LteUeNetDevice>()->GetImsi();
416 uint8_t lcId = 3;
417 double dlRxPackets = rlcStats->GetDlRxPackets(imsi, lcId);
418 double dlTxPackets = rlcStats->GetDlTxPackets(imsi, lcId);
419 double dlBler [[maybe_unused]] = 1.0 - (dlRxPackets / dlTxPackets);
420 double expectedDlRxPackets = dlTxPackets - dlTxPackets * m_blerRef;
421 NS_LOG_INFO("\tUser " << i << " imsi " << imsi << " DOWNLINK"
422 << " pkts rx " << dlRxPackets << " tx " << dlTxPackets << " BLER "
423 << dlBler << " Err " << std::fabs(m_blerRef - dlBler)
424 << " expected rx " << expectedDlRxPackets << " difference "
425 << std::abs(expectedDlRxPackets - dlRxPackets) << " tolerance "
427
428 // sanity check for whether the tx packets reported by the stats are correct
429 // we expect one packet per TTI
430 auto expectedDlTxPackets = static_cast<double>(statsDuration.GetMilliSeconds());
431 NS_TEST_ASSERT_MSG_EQ_TOL(dlTxPackets,
432 expectedDlTxPackets,
433 expectedDlTxPackets * 0.005,
434 " too different DL TX packets reported");
435
436 // this is the main test condition: check that the RX packets are within the expected range
437 NS_TEST_ASSERT_MSG_EQ_TOL(dlRxPackets,
438 expectedDlRxPackets,
440 "too different DL RX packets reported");
441 }
442
444}
This system test program creates different test cases with a single eNB and several UEs,...
LenaDataPhyErrorModelTestCase(uint16_t nUser, uint16_t dist, double blerRef, uint16_t toleranceRxPackets, Time statsStartTime, uint32_t rngRun)
Constructor.
static std::string BuildNameString(uint16_t nUser, uint16_t dist, uint32_t rngRun)
Builds the test name string based on provided parameter values.
uint16_t m_nUser
number of UE nodes
double m_dist
the distance between nodes
void DoRun() override
Implementation to actually run this TestCase.
uint16_t m_toleranceRxPackets
receive packet tolerance loss
Time m_statsStartTime
Extra time in the beginning of simulation to allow RRC connection establishment + SRS.
Lena Dl Ctrl Phy Error Model Test Case.
LenaDlCtrlPhyErrorModelTestCase(uint16_t nEnb, uint16_t dist, double blerRef, uint16_t toleranceRxPackets, Time statsStartTime, uint32_t rngRun)
Constructor.
uint16_t m_nEnb
the number of ENB nodes
static std::string BuildNameString(uint16_t nUser, uint16_t dist, uint32_t rngRun)
Build name string.
void DoRun() override
Implementation to actually run this TestCase.
Time m_statsStartTime
Extra time in the beginning of simulation to allow RRC connection establishment + SRS.
double m_dist
the distance between nodes
uint16_t m_toleranceRxPackets
receive packet tolerance loss
Lena Test Phy Error Model Suite.
AttributeValue implementation for Boolean.
Definition boolean.h:26
static void Install(Ptr< Node > node)
Install the MobilityBuildingInfo to a node.
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
This class contains the specification of EPS Bearers.
Definition eps-bearer.h:80
Qci
QoS Class Indicator.
Definition eps-bearer.h:95
@ GBR_CONV_VOICE
GBR Conversational Voice.
Definition eps-bearer.h:96
The eNodeB device implementation.
The LteUeNetDevice class implements the UE net device.
Helper class used to assign positions and mobility models to nodes.
Keep track of the current position and velocity of an object.
holds a vector of ns3::NetDevice pointers
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
Definition object.h:511
Smart pointer class similar to boost::intrusive_ptr.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition simulator.cc:131
static void Run()
Run the simulation.
Definition simulator.cc:167
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition simulator.cc:175
Hold variables of type string.
Definition string.h:45
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
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
Definition test.cc:432
void SetDataDir(std::string directory)
Set the data directory where reference trace files can be found.
Definition test.cc:472
A suite of tests to run.
Definition test.h:1267
Type
Type of test.
Definition test.h:1274
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
int64_t GetMilliSeconds() const
Get an approximation of the time stored in this instance in the indicated unit.
Definition nstime.h:397
AttributeValue implementation for Time.
Definition nstime.h:1432
Hold an unsigned integer type.
Definition uinteger.h:34
void SetGlobal(std::string name, const AttributeValue &value)
Definition config.cc:932
void SetDefault(std::string name, const AttributeValue &value)
Definition config.cc:886
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition log.h:191
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition log.h:264
static LenaTestPhyErrorModelSuite lenaTestPhyErrorModelSuite
Static variable for test initialization.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Definition object.h:619
#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
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition nstime.h:1345
Every class exported by the ns3 library is enclosed in the ns3 namespace.