30 #include "../model/satellite-constant-interference.h"
31 #include "../model/satellite-per-packet-interference.h"
32 #include "../model/satellite-traced-interference.h"
33 #include "../utils/satellite-env-variables.h"
35 #include "ns3/boolean.h"
36 #include "ns3/config.h"
37 #include "ns3/double.h"
39 #include "ns3/simulator.h"
40 #include "ns3/singleton.h"
41 #include "ns3/string.h"
43 #include "ns3/timer.h"
69 virtual void DoRun(
void);
73 : TestCase(
"Test satellite constant interference model.")
85 Singleton<SatEnvVariables>::Get()->DoInitialize();
86 Singleton<SatEnvVariables>::Get()->SetOutputVariables(
"test-sat-if-unit",
"constant",
true);
88 Ptr<SatConstantInterference> interference = CreateObject<SatConstantInterference>();
89 interference->SetAttribute(
"ConstantInterferencePower", DoubleValue(100.0));
92 Ptr<SatInterference::InterferenceChangeEvent>
event =
93 interference->Add(Time(10), 55, Mac48Address::ConvertFrom(Mac48Address::Allocate()));
97 NS_TEST_ASSERT_MSG_EQ(event->GetDuration(), Time(10),
"Event duration is incorrect");
98 NS_TEST_ASSERT_MSG_EQ(event->GetEndTime() - event->GetStartTime(),
100 "Event start time or end time incorrect");
101 NS_TEST_ASSERT_MSG_EQ(event->GetRxPower(), 55,
"Event RX power incorrect");
103 interference->NotifyRxStart(event);
105 std::vector<std::pair<double, double>> power = interference->Calculate(event);
107 NS_TEST_ASSERT_MSG_EQ(1, power.size(),
"Calculated power returned more than one fragment");
108 NS_TEST_ASSERT_MSG_EQ(1.0, power[0].first,
"Calculated power does not span the whole packet");
109 NS_TEST_ASSERT_MSG_EQ(100, power[0].second,
"Calculated power not correct");
111 interference->NotifyRxEnd(event);
114 interference->SetAttribute(
"ConstantInterferencePower", DoubleValue(50.0));
116 interference->NotifyRxStart(event);
118 power = interference->Calculate(event);
120 NS_TEST_ASSERT_MSG_EQ(1, power.size(),
"Calculated power returned more than one fragment");
121 NS_TEST_ASSERT_MSG_EQ(1.0, power[0].first,
"Calculated power does not span the whole packet");
122 NS_TEST_ASSERT_MSG_EQ(50, power[0].second,
"Calculated power not correct");
124 Singleton<SatEnvVariables>::Get()->DoDispose();
152 void StartReceiver(Time duration,
double power, Address rxAddress);
155 void Receive(uint32_t rxIndex);
158 virtual void DoRun(
void);
160 Ptr<SatInterference::InterferenceChangeEvent>
m_rxEvent[4];
166 : TestCase(
"Test satellite per packet interference model.")
171 for (
int i = 0; i < 4; i++)
185 Ptr<SatInterference::InterferenceChangeEvent>
event =
199 Simulator::Schedule(Time(duration),
211 NS_TEST_ASSERT_MSG_EQ(1, ifPower.size(),
"Calculated power returned more than one fragment");
212 NS_TEST_ASSERT_MSG_EQ(1.0, ifPower[0].first,
"Calculated power does not span the whole packet");
222 Singleton<SatEnvVariables>::Get()->DoInitialize();
223 Singleton<SatEnvVariables>::Get()->SetOutputVariables(
"test-sat-if-unit",
"perpacket",
true);
227 Simulator::Schedule(Time(0),
232 Mac48Address::ConvertFrom(Mac48Address::Allocate()));
233 Simulator::Schedule(Time(10),
238 Mac48Address::ConvertFrom(Mac48Address::Allocate()));
239 Simulator::Schedule(Time(30),
244 Mac48Address::ConvertFrom(Mac48Address::Allocate()));
245 Simulator::Schedule(Time(50),
250 Mac48Address::ConvertFrom(Mac48Address::Allocate()));
251 Simulator::Schedule(Time(10),
256 Mac48Address::ConvertFrom(Mac48Address::Allocate()));
257 Simulator::Schedule(Time(20),
262 Mac48Address::ConvertFrom(Mac48Address::Allocate()));
263 Simulator::Schedule(Time(30),
268 Mac48Address::ConvertFrom(Mac48Address::Allocate()));
269 Simulator::Schedule(Time(50),
274 Mac48Address::ConvertFrom(Mac48Address::Allocate()));
281 double finalDiff = std::abs((
double)995 / (
double)9 -
finalPower[0]);
283 NS_TEST_ASSERT_MSG_LT(finalDiff, 0.0000000000001,
"Final power incorrect");
286 finalDiff = std::abs((
double)196 -
finalPower[1]);
288 NS_TEST_ASSERT_MSG_LT(finalDiff, 0.0000000000001,
"Final power incorrect");
291 finalDiff = std::abs((
double)850 / (
double)6 -
finalPower[2]);
293 NS_TEST_ASSERT_MSG_LT(finalDiff, 0.0000000000001,
"Final power incorrect");
296 finalDiff = std::abs((
double)145 -
finalPower[3]);
298 NS_TEST_ASSERT_MSG_LT(finalDiff, 0.00000000000001,
"Final power incorrect");
300 Simulator::Destroy();
301 Singleton<SatEnvVariables>::Get()->DoDispose();
315 : TestSuite(
"sat-if-unit-test", Type::UNIT)
Test case to unit test satellite constant interference model.
SatConstantInterferenceTestCase()
virtual ~SatConstantInterferenceTestCase()
Test suite for Satellite interference unit test cases.
SatInterferenceTestSuite()
Test case to unit test satellite per packet interference model.
Ptr< SatPerPacketInterference > m_interference
SatPerPacketInterferenceTestCase()
virtual ~SatPerPacketInterferenceTestCase()
void Receive(uint32_t rxIndex)
void AddInterference(Time duration, double power, Address rxAddress)
Ptr< SatInterference::InterferenceChangeEvent > m_rxEvent[4]
void StartReceiver(Time duration, double power, Address rxAddress)
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.
static SatInterferenceTestSuite satSatInterferenceTestSuite