19 #include "ns3/abort.h"
21 #include "ns3/config.h"
22 #include "ns3/channel-condition-model.h"
23 #include "ns3/probabilistic-v2v-channel-condition-model.h"
24 #include "ns3/three-gpp-v2v-propagation-loss-model.h"
25 #include "ns3/constant-position-mobility-model.h"
27 #include "ns3/simulator.h"
28 #include "ns3/double.h"
29 #include "ns3/uinteger.h"
30 #include "ns3/boolean.h"
31 #include "ns3/core-module.h"
32 #include "ns3/node-container.h"
67 virtual void DoRun (
void);
86 double m_pNlosv {0.0};
93 uint64_t m_numLos {0};
94 uint64_t m_numNlosv {0};
99 :
TestCase (
"Test case for the class ProbabilisticV2vUrbanChannelConditionModel"),
111 if (cond->GetLosCondition () == ChannelCondition::LosConditionValue::LOS)
115 else if (cond->GetLosCondition () == ChannelCondition::LosConditionValue::NLOSv)
124 RngSeedManager::SetSeed (1);
125 RngSeedManager::SetRun (1);
134 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId ();
135 testVector.
m_pNlosv =
std::min (1.0,
std::max (0.0, 1 / (0.0396 * 10.0) * exp (-(log (10.0) - 5.2718) * (log (10.0) - 5.2718) / 3.4827)));
142 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId ();
143 testVector.
m_pNlosv =
std::min (1.0,
std::max (0.0, 1 / (0.0396 * 100.0) * exp (-(log (100.0) - 5.2718) * (log (100.0) - 5.2718) / 3.4827)));
150 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId ();
151 testVector.
m_pNlosv =
std::min (1.0,
std::max (0.0, 1 / (0.0312 * 10.0) * exp (-(log (10.0) - 5.0063) * (log (10.0) - 5.0063) / 2.4544)));
158 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId ();
159 testVector.
m_pNlosv =
std::min (1.0,
std::max (0.0, 1 / (0.0312 * 100.0) * exp (-(log (100.0) - 5.0063) * (log (100.0) - 5.0063) / 2.4544)));
166 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId ();
167 testVector.
m_pNlosv =
std::min (1.0,
std::max (0.0, 1 / (0.0242 * 10.0) * exp (-(log (10.0) - 5.0115) * (log (10.0) - 5.0115) / 2.2092)));
174 testVector.
m_typeId = ProbabilisticV2vUrbanChannelConditionModel::GetTypeId ();
175 testVector.
m_pNlosv =
std::min (1.0,
std::max (0.0, 1 / (0.0242 * 100.0) * exp (-(log (100.0) - 5.0115) * (log (100.0) - 5.0115) / 2.2092)));
191 nodes.Get (0)->AggregateObject (a);
192 nodes.Get (1)->AggregateObject (b);
195 uint32_t numberOfReps = 500000;
213 for (uint32_t j = 0; j < numberOfReps; j++)
219 Simulator::Destroy ();
221 double resultPlos = double (
m_numLos) / double (numberOfReps);
222 double resultPnlosv = double (
m_numNlosv) / double (numberOfReps);
259 virtual void DoRun (
void);
291 :
TestCase (
"Test case for the class ProbabilisticV2vHighwayChannelConditionModel"),
303 if (cond->GetLosCondition () == ChannelCondition::LosConditionValue::LOS)
307 else if (cond->GetLosCondition () == ChannelCondition::LosConditionValue::NLOS)
316 RngSeedManager::SetSeed (1);
317 RngSeedManager::SetRun (1);
325 double aLos = 1.5e-6;
326 double bLos = -0.0015;
329 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId ();
330 double aNlos = -2.9e-7;
331 double bNlos = 0.00059;
332 double cNlos = 0.0017;
340 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId ();
351 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId ();
362 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId ();
373 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId ();
384 testVector.
m_typeId = ProbabilisticV2vHighwayChannelConditionModel::GetTypeId ();
401 nodes.Get (0)->AggregateObject (a);
402 nodes.Get (1)->AggregateObject (b);
405 uint32_t numberOfReps = 500000;
423 for (uint32_t j = 0; j < numberOfReps; j++)
429 Simulator::Destroy ();
431 double resultPlos = double (
m_numLos) / double (numberOfReps);
432 double resultPnlos = double (
m_numNlos) / double (numberOfReps);
461 :
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
TestVectors< TestVector > m_testVectors
array containing all the test vectors
uint64_t m_numNlos
the number of NLOS occurrences
virtual void DoRun(void)
Builds the simulation scenario and perform the tests.
virtual ~V2vHighwayProbChCondModelTestCase()
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 EvaluateChannelCondition(Ptr< MobilityModel > a, Ptr< MobilityModel > b)
Evaluates the channel condition between two nodes by calling the method GetChannelCondition on m_cond...
virtual void DoRun(void)
Builds the simulation scenario and perform the tests.
uint64_t m_numLos
the number of LOS occurrences
V2vUrbanProbChCondModelTestCase()
Constructor.
Ptr< ProbabilisticV2vUrbanChannelConditionModel > m_condModel
the channel condition model
virtual ~V2vUrbanProbChCondModelTestCase()
Destructor.
uint64_t m_numNlosv
the number of NLOSv occurrences
double m_tolerance
tolerance
void SetPosition(const Vector &position)
keep track of a set of node pointers.
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(void) 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.
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)
virtual int64_t AssignStreams(int64_t stream) override
If this model uses objects of type RandomVariableStream, set the stream numbers to the integers start...
virtual Ptr< ChannelCondition > GetChannelCondition(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Retrieve the condition of the channel between a and b.
AttributeValue implementation for Time.
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.