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),
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
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
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
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),
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
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
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
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
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
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 // Call AssignStreams in the EpcHelper only once by setting 'assignEpcStreams' only once
204 // Then, increment the stream value by 1000 (a magic number that should ensure that there
205 // are no overlapping stream assignments) each time that AssignStreams is called,
206 // to lessen the possibility that random variable stream assignment changes propagate
207 // to other objects.
208 lena->AssignStreams(enbDevs, stream, false);
209 stream += 1000;
210 ueDevs = lena->InstallUeDevice(ueNodes);
211 lena->AssignStreams(ueDevs, stream, true);
212 stream += 1000;
213
214 // Attach a UE to a eNB
215 lena->Attach(ueDevs, enbDevs.Get(0));
216
217 // Activate an EPS bearer
219 EpsBearer bearer(q);
220 lena->ActivateDataRadioBearer(ueDevs, bearer);
221
222 Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get(0)->GetObject<LteEnbNetDevice>();
223 Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy();
224 enbPhy->SetAttribute("TxPower", DoubleValue(43.0));
225 enbPhy->SetAttribute("NoiseFigure", DoubleValue(5.0));
226 // place the HeNB over the default rooftop level (20 mt.)
227 Ptr<MobilityModel> mm = enbNodes.Get(0)->GetObject<MobilityModel>();
228 mm->SetPosition(Vector(0.0, 0.0, 30.0));
229
230 // Set UEs' position and power
231 for (int i = 0; i < m_nUser; i++)
232 {
233 Ptr<MobilityModel> mm1 = ueNodes.Get(i)->GetObject<MobilityModel>();
234 mm1->SetPosition(Vector(m_dist, 0.0, 1.0));
235 Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get(i)->GetObject<LteUeNetDevice>();
236 Ptr<LteUePhy> uePhy = lteUeDev->GetPhy();
237 uePhy->SetAttribute("TxPower", DoubleValue(23.0));
238 uePhy->SetAttribute("NoiseFigure", DoubleValue(9.0));
239 }
240
241 Time statsDuration = Seconds(1);
242 Simulator::Stop(m_statsStartTime + statsDuration - Seconds(0.0001));
243
244 lena->EnableRlcTraces();
245 Ptr<RadioBearerStatsCalculator> rlcStats = lena->GetRlcStats();
246 rlcStats->SetAttribute("StartTime", TimeValue(m_statsStartTime));
247 rlcStats->SetAttribute("EpochDuration", TimeValue(statsDuration));
248
250
251 NS_LOG_INFO("\tTest downlink data shared channels (PDSCH)");
252 NS_LOG_INFO("Test with " << m_nUser << " user(s) at distance " << m_dist << " expected BLER "
253 << m_blerRef);
254 for (int i = 0; i < m_nUser; i++)
255 {
256 // get the imsi
257 uint64_t imsi = ueDevs.Get(i)->GetObject<LteUeNetDevice>()->GetImsi();
258 uint8_t lcId = 3;
259
260 double dlRxPackets = rlcStats->GetDlRxPackets(imsi, lcId);
261 double dlTxPackets = rlcStats->GetDlTxPackets(imsi, lcId);
262 double dlBler [[maybe_unused]] = 1.0 - (dlRxPackets / dlTxPackets);
263 double expectedDlRxPackets = dlTxPackets - dlTxPackets * m_blerRef;
264 NS_LOG_INFO("\tUser " << i << " imsi " << imsi << " DOWNLINK"
265 << " pkts rx " << dlRxPackets << " tx " << dlTxPackets << " BLER "
266 << dlBler << " Err " << std::fabs(m_blerRef - dlBler)
267 << " expected rx " << expectedDlRxPackets << " difference "
268 << std::abs(expectedDlRxPackets - dlRxPackets) << " tolerance "
270
271 // sanity check for whether the tx packets reported by the stats are correct
272 // we expect one packet per TTI
273 auto expectedDlTxPackets = static_cast<double>(statsDuration.GetMilliSeconds());
274 NS_TEST_ASSERT_MSG_EQ_TOL(dlTxPackets,
275 expectedDlTxPackets,
276 expectedDlTxPackets * 0.005,
277 " too different DL TX packets reported");
278
279 // this is the main test condition: check that the RX packets are within the expected range
280 NS_TEST_ASSERT_MSG_EQ_TOL(dlRxPackets,
281 expectedDlRxPackets,
283 " too different DL RX packets reported");
284 }
285
287}
288
289std::string
291{
292 std::ostringstream oss;
293 oss << "DlCtrlPhyErrorModel " << nEnb << " eNBs, distance " << dist << " m, RngRun " << rngRun;
294 return oss.str();
295}
296
298 uint16_t dist,
299 double blerRef,
300 uint16_t toleranceRxPackets,
301 Time statsStartTime,
302 uint32_t rngRun)
303 : TestCase(BuildNameString(nEnb, dist, rngRun)),
304 m_nEnb(nEnb),
305 m_dist(dist),
306 m_blerRef(blerRef),
307 m_toleranceRxPackets(toleranceRxPackets),
308 m_statsStartTime(statsStartTime),
309 m_rngRun(rngRun)
310{
311}
312
316
317void
319{
320 SetDataDir(NS_TEST_SOURCEDIR);
321
322 double ber = 0.03;
323 Config::SetDefault("ns3::LteAmc::Ber", DoubleValue(ber));
324 Config::SetDefault("ns3::LteAmc::AmcModel", EnumValue(LteAmc::PiroEW2010));
325 Config::SetDefault("ns3::LteSpectrumPhy::CtrlErrorModelEnabled", BooleanValue(true));
326 Config::SetDefault("ns3::LteSpectrumPhy::DataErrorModelEnabled", BooleanValue(false));
327 Config::SetDefault("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue(false));
329
330 Config::SetDefault("ns3::RadioBearerStatsCalculator::DlRlcOutputFilename",
331 StringValue(CreateTempDirFilename("DlRlcStats.txt")));
332 Config::SetDefault("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename",
333 StringValue(CreateTempDirFilename("UlRlcStats.txt")));
334
335 // Disable Uplink Power Control
336 Config::SetDefault("ns3::LteUePhy::EnableUplinkPowerControl", BooleanValue(false));
337
338 /*
339 * Initialize Simulation Scenario: 1 eNB and m_nUser UEs
340 */
341
342 int64_t stream = 1;
344
345 // Create Nodes: eNodeB and UE
346 NodeContainer enbNodes;
347 NodeContainer ueNodes;
348 enbNodes.Create(m_nEnb);
349 ueNodes.Create(1);
350
351 // Install Mobility Model
352 MobilityHelper mobility;
353 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
354 mobility.Install(enbNodes);
355 BuildingsHelper::Install(enbNodes);
356 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
357 mobility.Install(ueNodes);
359
360 // remove random shadowing component
361 lena->SetAttribute("PathlossModel", StringValue("ns3::HybridBuildingsPropagationLossModel"));
362 lena->SetPathlossModelAttribute("ShadowSigmaOutdoor", DoubleValue(0.0));
363 lena->SetPathlossModelAttribute("ShadowSigmaIndoor", DoubleValue(0.0));
364 lena->SetPathlossModelAttribute("ShadowSigmaExtWalls", DoubleValue(0.0));
365
366 // Create Devices and install them in the Nodes (eNB and UE)
367 NetDeviceContainer enbDevs;
368 NetDeviceContainer ueDevs;
369 lena->SetSchedulerType("ns3::RrFfMacScheduler");
370 lena->SetSchedulerAttribute("UlCqiFilter", EnumValue(FfMacScheduler::PUSCH_UL_CQI));
371
372 enbDevs = lena->InstallEnbDevice(enbNodes);
373 // Call AssignStreams in the EpcHelper only once by setting 'assignEpcStreams' only once
374 // Then, increment the stream value by 1000 (a magic number that should ensure that there
375 // are no overlapping stream assignments) each time that AssignStreams is called,
376 // to lessen the possibility that random variable stream assignment changes propagate
377 // to other objects.
378 lena->AssignStreams(enbDevs, stream, false);
379 stream += 1000;
380 ueDevs = lena->InstallUeDevice(ueNodes);
381 lena->AssignStreams(ueDevs, stream, true);
382 stream += 1000;
383
384 // Attach a UE to one eNB (the others are interfering ones)
385 lena->Attach(ueDevs, enbDevs.Get(0));
386
387 // Activate an EPS bearer
389 EpsBearer bearer(q);
390 lena->ActivateDataRadioBearer(ueDevs, bearer);
391
392 // Set UEs' position and power
393 for (int i = 0; i < m_nEnb; i++)
394 {
395 // place the HeNB over the default rooftop level (20 mt.)
396 Ptr<MobilityModel> mm = enbNodes.Get(i)->GetObject<MobilityModel>();
397 mm->SetPosition(Vector(0.0, 0.0, 30.0));
398 Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get(i)->GetObject<LteEnbNetDevice>();
399 Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy();
400 enbPhy->SetAttribute("TxPower", DoubleValue(43.0));
401 enbPhy->SetAttribute("NoiseFigure", DoubleValue(5.0));
402 }
403
404 // Set UEs' position and power
405 Ptr<MobilityModel> mm = ueNodes.Get(0)->GetObject<MobilityModel>();
406 mm->SetPosition(Vector(m_dist, 0.0, 1.0));
407 Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get(0)->GetObject<LteUeNetDevice>();
408 Ptr<LteUePhy> uePhy = lteUeDev->GetPhy();
409 uePhy->SetAttribute("TxPower", DoubleValue(23.0));
410 uePhy->SetAttribute("NoiseFigure", DoubleValue(9.0));
411
412 Time statsDuration = Seconds(1);
413 Simulator::Stop(m_statsStartTime + statsDuration - Seconds(0.0001));
414
415 lena->EnableRlcTraces();
416 Ptr<RadioBearerStatsCalculator> rlcStats = lena->GetRlcStats();
417 rlcStats->SetAttribute("StartTime", TimeValue(m_statsStartTime));
418 rlcStats->SetAttribute("EpochDuration", TimeValue(statsDuration));
419
421
422 NS_LOG_INFO("\tTest downlink control channels (PCFICH+PDCCH)");
423 NS_LOG_INFO("Test with " << m_nEnb << " eNB(s) at distance " << m_dist << " expected BLER "
424 << m_blerRef);
425 int nUser = 1;
426 for (int i = 0; i < nUser; i++)
427 {
428 // get the imsi
429 uint64_t imsi = ueDevs.Get(i)->GetObject<LteUeNetDevice>()->GetImsi();
430 uint8_t lcId = 3;
431 double dlRxPackets = rlcStats->GetDlRxPackets(imsi, lcId);
432 double dlTxPackets = rlcStats->GetDlTxPackets(imsi, lcId);
433 double dlBler [[maybe_unused]] = 1.0 - (dlRxPackets / dlTxPackets);
434 double expectedDlRxPackets = dlTxPackets - dlTxPackets * m_blerRef;
435 NS_LOG_INFO("\tUser " << i << " imsi " << imsi << " DOWNLINK"
436 << " pkts rx " << dlRxPackets << " tx " << dlTxPackets << " BLER "
437 << dlBler << " Err " << std::fabs(m_blerRef - dlBler)
438 << " expected rx " << expectedDlRxPackets << " difference "
439 << std::abs(expectedDlRxPackets - dlRxPackets) << " tolerance "
441
442 // sanity check for whether the tx packets reported by the stats are correct
443 // we expect one packet per TTI
444 auto expectedDlTxPackets = static_cast<double>(statsDuration.GetMilliSeconds());
445 NS_TEST_ASSERT_MSG_EQ_TOL(dlTxPackets,
446 expectedDlTxPackets,
447 expectedDlTxPackets * 0.005,
448 " too different DL TX packets reported");
449
450 // this is the main test condition: check that the RX packets are within the expected range
451 NS_TEST_ASSERT_MSG_EQ_TOL(dlRxPackets,
452 expectedDlRxPackets,
454 "too different DL RX packets reported");
455 }
456
458}
uint32_t q
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:518
Smart pointer class similar to boost::intrusive_ptr.
Definition ptr.h:70
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition simulator.cc:125
static void Run()
Run the simulation.
Definition simulator.cc:161
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition simulator.cc:169
Hold variables of type string.
Definition string.h:45
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Definition test.cc:296
@ EXTENSIVE
Medium length test.
Definition test.h:1058
@ QUICK
Fast test.
Definition test.h:1057
@ TAKES_FOREVER
Very long running test.
Definition test.h:1059
std::string CreateTempDirFilename(std::string filename)
Construct the full path to a file in a temporary directory.
Definition test.cc:436
void SetDataDir(std::string directory)
Set the data directory where reference trace files can be found.
Definition test.cc:476
TestCase(const TestCase &)=delete
Caller graph was not generated because of its size.
Type
Type of test.
Definition test.h:1271
TestSuite(std::string name, Type type=Type::UNIT)
Construct a new test suite.
Definition test.cc:494
Simulation virtual time values and global simulation resolution.
Definition nstime.h:95
int64_t GetMilliSeconds() const
Get an approximation of the time stored in this instance in the indicated unit.
Definition nstime.h:403
AttributeValue implementation for Time.
Definition nstime.h:1375
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:194
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition log.h:267
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:627
#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:326
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition nstime.h:1273
Every class exported by the ns3 library is enclosed in the ns3 namespace.