27 #include <ns3/object.h>
28 #include <ns3/spectrum-interference.h>
29 #include <ns3/spectrum-error-model.h>
32 #include <ns3/simulator.h>
33 #include <ns3/packet.h>
35 #include "ns3/radio-bearer-stats-calculator.h"
36 #include <ns3/constant-position-mobility-model.h>
37 #include "lte-test-tdmt-ff-mac-scheduler.h"
38 #include <ns3/eps-bearer.h>
39 #include <ns3/node-container.h>
40 #include <ns3/mobility-helper.h>
41 #include <ns3/net-device-container.h>
42 #include <ns3/lte-ue-net-device.h>
43 #include <ns3/lte-enb-net-device.h>
44 #include <ns3/lte-ue-rrc.h>
45 #include <ns3/lte-helper.h>
46 #include "ns3/string.h"
47 #include "ns3/double.h"
48 #include <ns3/lte-enb-phy.h>
49 #include <ns3/lte-ue-phy.h>
50 #include <ns3/boolean.h>
54 #include "lte-test-tdmt-ff-mac-scheduler.h"
60 LenaTestTdMtFfMacSchedulerSuite::LenaTestTdMtFfMacSchedulerSuite ()
61 :
TestSuite (
"lte-tdmt-ff-mac-scheduler", SYSTEM)
63 NS_LOG_INFO (
"creating LenaTestTdMtFfMacSchedulerSuite");
65 bool errorModel =
false;
159 LenaTdMtFfMacSchedulerTestCase::BuildNameString (uint16_t nUser, uint16_t dist)
161 std::ostringstream oss;
162 oss << nUser <<
" UEs, distance " << dist <<
" m";
166 LenaTdMtFfMacSchedulerTestCase::LenaTdMtFfMacSchedulerTestCase (uint16_t nUser, uint16_t nLc, uint16_t dist,
double thrRefDl,
double thrRefUl,
bool errorModelEnabled)
167 :
TestCase (BuildNameString (nUser, dist)),
171 m_thrRefDl (thrRefDl),
172 m_thrRefUl (thrRefUl),
173 m_errorModelEnabled (errorModelEnabled)
177 LenaTdMtFfMacSchedulerTestCase::~LenaTdMtFfMacSchedulerTestCase ()
188 if (!m_errorModelEnabled)
224 lteHelper->
Attach (ueDevs, enbDevs.
Get (0));
234 enbPhy->SetAttribute (
"TxPower",
DoubleValue (30.0));
235 enbPhy->SetAttribute (
"NoiseFigure",
DoubleValue (5.0));
238 for (
int i = 0; i < m_nUser; i++)
244 uePhy->SetAttribute (
"TxPower",
DoubleValue (23.0));
245 uePhy->SetAttribute (
"NoiseFigure",
DoubleValue (9.0));
249 double statsStartTime = 0.300;
250 double statsDuration = 0.6;
251 double tolerance = 0.1;
266 NS_LOG_INFO (
"DL - Test with " << m_nUser <<
" user(s) at distance " << m_dist);
267 std::vector <uint64_t> dlDataRxed;
268 for (
int i = 0; i < m_nUser; i++)
273 dlDataRxed.push_back (rlcStats->
GetDlRxData (imsi, lcId));
274 NS_LOG_INFO (
"\tUser " << i <<
" imsi " << imsi <<
" bytes rxed " << (
double)dlDataRxed.at (i) <<
" thr " << (double)dlDataRxed.at (i) / statsDuration <<
" ref " << m_thrRefDl);
283 for (
int i = 0; i < m_nUser; i++)
285 double throughput = (double)dlDataRxed.at (i) / statsDuration;
286 if (throughput != 0 && found == 0)
288 NS_TEST_ASSERT_MSG_EQ_TOL (throughput, m_thrRefDl, m_thrRefDl * tolerance,
" Unfair Throughput!");
291 else if (throughput != 0 && found == 1)
293 NS_TEST_ASSERT_MSG_EQ_TOL (0, m_thrRefDl, m_thrRefDl * tolerance,
" Unfair Throughput!");
296 NS_TEST_ASSERT_MSG_EQ_TOL (throughput, 0, 0,
" Unfair Throughput!");
302 NS_LOG_INFO (
"UL - Test with " << m_nUser <<
" user(s) at distance " << m_dist);
303 std::vector <uint64_t> ulDataRxed;
304 for (
int i = 0; i < m_nUser; i++)
310 ulDataRxed.push_back (rlcStats->
GetUlRxData (imsi, lcId));
311 NS_LOG_INFO (
"\tUser " << i <<
" imsi " << imsi <<
" bytes rxed " << (
double)ulDataRxed.at (i) <<
" thr " << (double)ulDataRxed.at (i) / statsDuration <<
" ref " << m_thrRefUl);
319 for (
int i = 0; i < m_nUser; i++)
321 NS_TEST_ASSERT_MSG_EQ_TOL ((
double)ulDataRxed.at (i) / statsDuration, m_thrRefUl, m_thrRefUl * tolerance,
" Unfair Throughput!");
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
NetDeviceContainer InstallEnbDevice(NodeContainer c)
hold variables of type string
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
Ptr< LteEnbPhy > GetPhy(void) const
Mobility model for which the current position does not change once it has been set and until it is se...
#define NS_LOG_COMPONENT_DEFINE(name)
void EnableRlcTraces(void)
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
void SetSchedulerType(std::string type)
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
hold objects of type ns3::Time
uint64_t GetDlRxData(uint64_t imsi, uint8_t lcid)
void Attach(NetDeviceContainer ueDevices, Ptr< NetDevice > enbDevice)
holds a vector of ns3::NetDevice pointers
static void Destroy(void)
void SetDefault(std::string name, const AttributeValue &value)
keep track of a set of node pointers.
void SetMobilityModel(std::string type, std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue())
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual test case to this test suite.
void SetPosition(const Vector &position)
Ptr< RadioBearerStatsCalculator > GetRlcStats(void)
NetDeviceContainer InstallUeDevice(NodeContainer c)
Helper class used to assign positions and mobility models to nodes.
uint64_t GetUlRxData(uint64_t imsi, uint8_t lcid)
Time Seconds(double seconds)
create ns3::Time instances in units of seconds.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void EnableMacTraces(void)
virtual void DoRun(void)
Implementation to actually run this test case.
Hold an floating point type.
void SetAttribute(std::string name, const AttributeValue &value)
Ptr< T > GetObject(void) const