18 #include "ns3/abort.h"
19 #include "ns3/boolean.h"
20 #include "ns3/channel-condition-model.h"
21 #include "ns3/config.h"
22 #include "ns3/constant-position-mobility-model.h"
23 #include "ns3/core-module.h"
24 #include "ns3/double.h"
26 #include "ns3/node-container.h"
27 #include "ns3/probabilistic-v2v-channel-condition-model.h"
28 #include "ns3/simulator.h"
30 #include "ns3/three-gpp-v2v-propagation-loss-model.h"
31 #include "ns3/uinteger.h"
66 void DoRun()
override;
93 uint64_t m_numNlosv{0};
98 :
TestCase(
"Test case for the class ProbabilisticV2vUrbanChannelConditionModel"),
113 if (cond->GetLosCondition() == ChannelCondition::LosConditionValue::LOS)
117 else if (cond->GetLosCondition() == ChannelCondition::LosConditionValue::NLOSv)
126 RngSeedManager::SetSeed(1);
127 RngSeedManager::SetRun(1);
136 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId();
140 1 / (0.0396 * 10.0) * exp(-(log(10.0) - 5.2718) * (log(10.0) - 5.2718) / 3.4827)));
147 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId();
151 1 / (0.0396 * 100.0) *
152 exp(-(log(100.0) - 5.2718) * (log(100.0) - 5.2718) / 3.4827)));
159 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId();
163 1 / (0.0312 * 10.0) * exp(-(log(10.0) - 5.0063) * (log(10.0) - 5.0063) / 2.4544)));
170 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId();
174 1 / (0.0312 * 100.0) *
175 exp(-(log(100.0) - 5.0063) * (log(100.0) - 5.0063) / 2.4544)));
182 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId();
186 1 / (0.0242 * 10.0) * exp(-(log(10.0) - 5.0115) * (log(10.0) - 5.0115) / 2.2092)));
193 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId();
197 1 / (0.0242 * 100.0) *
198 exp(-(log(100.0) - 5.0115) * (log(100.0) - 5.0115) / 2.2092)));
218 uint32_t numberOfReps = 500000;
236 for (uint32_t j = 0; j < numberOfReps; j++)
246 Simulator::Destroy();
248 double resultPlos = double(
m_numLos) / double(numberOfReps);
249 double resultPnlosv = double(
m_numNlosv) / double(numberOfReps);
252 <<
" numberOfReps " << numberOfReps <<
" resultPlos "
253 << resultPlos <<
" ref " << testVector.
m_pLos);
257 "Got unexpected LOS probability");
260 <<
" numberOfReps " << numberOfReps <<
" resultPnlosv "
261 << resultPnlosv <<
" ref " << testVector.
m_pNlosv);
265 "Got unexpected NLOSv probability");
298 void DoRun()
override;
330 :
TestCase(
"Test case for the class ProbabilisticV2vHighwayChannelConditionModel"),
345 if (cond->GetLosCondition() == ChannelCondition::LosConditionValue::LOS)
349 else if (cond->GetLosCondition() == ChannelCondition::LosConditionValue::NLOS)
358 RngSeedManager::SetSeed(1);
359 RngSeedManager::SetRun(1);
367 double aLos = 1.5e-6;
368 double bLos = -0.0015;
371 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId();
372 double aNlos = -2.9e-7;
373 double bNlos = 0.00059;
374 double cNlos = 0.0017;
382 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId();
384 std::min(1.0,
std::max(0.0, aNlos * 100.0 * 100.0 + bNlos * 100.0 + cNlos));
394 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId();
405 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId();
407 std::min(1.0,
std::max(0.0, aNlos * 100.0 * 100.0 + bNlos * 100.0 + cNlos));
417 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId();
428 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId();
430 std::min(1.0,
std::max(0.0, aNlos * 100.0 * 100.0 + bNlos * 100.0 + cNlos));
450 uint32_t numberOfReps = 500000;
468 for (uint32_t j = 0; j < numberOfReps; j++)
478 Simulator::Destroy();
480 double resultPlos = double(
m_numLos) / double(numberOfReps);
481 double resultPnlos = double(
m_numNlos) / double(numberOfReps);
484 <<
" numberOfReps " << numberOfReps <<
" resultPlos "
485 << resultPlos <<
" ref " << testVector.
m_pLos);
489 "Got unexpected LOS probability");
492 <<
" numberOfReps " << numberOfReps <<
" resultPnlos "
493 << resultPnlos <<
" ref " << testVector.
m_pNlos);
497 "Got unexpected NLOS probability");
522 :
TestSuite(
"probabilistic-v2v-channel-condition-model", SYSTEM)
Test suite for the probabilistic V2V channel condition model.
ProbabilisticV2vChCondModelsTestSuite()
Test case for the V2V Highway channel condition models using a fully probabilistic model to determine...
void EvaluateChannelCondition(Ptr< MobilityModel > a, Ptr< MobilityModel > b)
Evaluates the channel condition between two nodes by calling the method GetChannelCondition on m_cond...
V2vHighwayProbChCondModelTestCase()
Constructor.
Ptr< ProbabilisticV2vHighwayChannelConditionModel > m_condModel
the channel condition model
void DoRun() override
Builds the simulation scenario and perform the tests.
TestVectors< TestVector > m_testVectors
array containing all the test vectors
uint64_t m_numNlos
the number of NLOS occurrences
~V2vHighwayProbChCondModelTestCase() override
Destructor.
double m_tolerance
tolerance
uint64_t m_numLos
the number of LOS occurrences
Test case for the V2V Urban channel condition models using a fully probabilistic model to determine L...
TestVectors< TestVector > m_testVectors
array containing all the test vectors
void DoRun() override
Builds the simulation scenario and perform the tests.
void EvaluateChannelCondition(Ptr< MobilityModel > a, Ptr< MobilityModel > b)
Evaluates the channel condition between two nodes by calling the method GetChannelCondition on m_cond...
uint64_t m_numLos
the number of LOS occurrences
V2vUrbanProbChCondModelTestCase()
Constructor.
Ptr< ProbabilisticV2vUrbanChannelConditionModel > m_condModel
the channel condition model
uint64_t m_numNlosv
the number of NLOSv occurrences
double m_tolerance
tolerance
~V2vUrbanProbChCondModelTestCase() override
Destructor.
void SetPosition(const Vector &position)
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.
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
Instantiate subclasses of ns3::Object.
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
void AggregateObject(Ptr< Object > other)
Aggregate two Objects together.
Computes the channel condition for the V2V Highway scenario.
Computes the channel condition for the V2V Urban scenario.
Hold variables of type string.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
A simple way to store test vectors (for stimulus or from responses)
int64_t AssignStreams(int64_t stream) override
If this model uses objects of type RandomVariableStream, set the stream numbers to the integers start...
Ptr< ChannelCondition > GetChannelCondition(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Retrieve the condition of the channel between a and b.
a unique identifier for an interface.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#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 ...
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static ProbabilisticV2vChCondModelsTestSuite g_probabilisticV2vChCondModelsTestSuite
Static variable for test initialization.
Struct containing the parameters for each test.
TypeId m_typeId
the type ID of the channel condition model to be used
std::string m_density
the vehicles density
double m_pNlos
NLOS probability.
Vector m_positionA
the position of the first node
double m_pLos
LOS probability.
Vector m_positionB
the position of the second node
Struct containing the parameters for each test.
std::string m_density
the vehicles density
TypeId m_typeId
the type ID of the channel condition model to be used
double m_pNlosv
NLOSv probability.
Vector m_positionB
the position of the second node
Vector m_positionA
the position of the first node
double m_pLos
LOS probability.