OLD | NEW |
(Empty) | |
| 1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ |
| 2 /* |
| 3 * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) |
| 4 * |
| 5 * This program is free software; you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License version 2 as |
| 7 * published by the Free Software Foundation; |
| 8 * |
| 9 * This program is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 12 * GNU General Public License for more details. |
| 13 * |
| 14 * You should have received a copy of the GNU General Public License |
| 15 * along with this program; if not, write to the Free Software |
| 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 17 * |
| 18 * Author: Marco Miozzo <marco.miozzo@cttc.es>, |
| 19 * Nicola Baldo <nbaldo@cttc.es> |
| 20 * Dizhi Zhou <dizhi.zhou@gmail.com> |
| 21 */ |
| 22 |
| 23 #include <iostream> |
| 24 #include <sstream> |
| 25 #include <string> |
| 26 |
| 27 #include <ns3/object.h> |
| 28 #include <ns3/spectrum-interference.h> |
| 29 #include <ns3/spectrum-error-model.h> |
| 30 #include <ns3/log.h> |
| 31 #include <ns3/test.h> |
| 32 #include <ns3/simulator.h> |
| 33 #include <ns3/packet.h> |
| 34 #include <ns3/ptr.h> |
| 35 #include "ns3/radio-bearer-stats-calculator.h" |
| 36 #include <ns3/constant-position-mobility-model.h> |
| 37 #include "lte-test-tta-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> |
| 51 #include <ns3/enum.h> |
| 52 |
| 53 |
| 54 NS_LOG_COMPONENT_DEFINE ("LenaTestTtaFfMacCheduler"); |
| 55 |
| 56 using namespace ns3; |
| 57 |
| 58 LenaTestTtaFfMacSchedulerSuite::LenaTestTtaFfMacSchedulerSuite () |
| 59 : TestSuite ("lte-tta-ff-mac-scheduler", SYSTEM) |
| 60 { |
| 61 NS_LOG_INFO ("creating LenaTestTtaFfMacSchedulerSuite"); |
| 62 |
| 63 //Test Case : AMC works in TTA |
| 64 |
| 65 // DOWNLINK - DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.21
3) |
| 66 // 1 user -> 24 PRB at Itbs 26 -> 2196 -> 2196000 bytes/sec for first UE; 0 by
tes/sec for other UEs |
| 67 // 3 users -> 2196000 among 3 users -> 2196000 bytes/sec for first UE; 0 bytes
/sec for other UEs |
| 68 // 6 users -> 2196000 among 6 users -> 2196000 bytes/sec for first UE; 0 bytes
/sec for other UEs |
| 69 // 12 users -> 2196000 among 12 users -> 2196000 bytes/sec for first UE; 0 byt
es/sec for other UEs |
| 70 // 15 users -> 2196000 among 15 users -> 2196000 bytes/sec for first UE; 0 byt
es/sec for other UEs |
| 71 // UPLINK- DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.213) |
| 72 // 1 user -> 25 PRB at Itbs 26 -> 2292 -> 2292000 bytes/sec |
| 73 // 3 users -> 8 PRB at Itbs 26 -> 749 -> 749000 bytes/sec |
| 74 // 6 users -> 4 PRB at Itbs 26 -> 373 -> 373000 bytes/sec |
| 75 // 12 users -> 2 PRB at Itbs 26 -> 185 -> 185000 bytes/sec |
| 76 // 15 users -> 1 PRB at Itbs 26 -> 89 -> 89000 bytes/sec |
| 77 AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,0,2196000,2292000)); |
| 78 AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,0,2196000,749000)); |
| 79 AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,0,2196000,373000)); |
| 80 AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,0,2196000,185000)); |
| 81 AddTestCase (new LenaTtaFfMacSchedulerTestCase (15,0,0,2196000,89000)); |
| 82 · |
| 83 // DOWNLINK - DISTANCE 3000 -> MCS 24 -> Itbs 30 (from table 7.1.7.2.1-1 of 36
.213) |
| 84 // 1 user -> 24 PRB at Itbs 20 -> 1383 -> 1383000 bytes/sec for first UE; 0 by
tes/sec for other UEs |
| 85 // 3 users -> 1383000 among 3 users -> 1383000 bytes/sec for first UE; 0 bytes
/sec for other UEs |
| 86 // 6 users -> 1383000 among 6 users -> 1383000 bytes/sec for first UE; 0 bytes
/sec for other UEs |
| 87 // 12 users -> 1383000 among 12 users -> 1383000 bytes/sec for first UE; 0 byt
es/sec for other UEs |
| 88 // 15 users -> 1383000 among 15 users -> 1383000 bytes/sec for first UE; 0 byt
es/sec for other UEs |
| 89 // UPLINK - DISTANCE 3000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.2
13) |
| 90 // 1 user -> 25 PRB at Itbs 18 -> 1239 -> 1239000 bytes/sec |
| 91 // 3 users -> 8 PRB at Itbs 18 -> 389 -> 389000 bytes/sec |
| 92 // 6 users -> 4 PRB at Itbs 18 -> 193 -> 193000 bytes/sec |
| 93 // 12 users -> 2 PRB at Itbs 18 -> 97 -> 97000 bytes/sec |
| 94 // 15 users -> 1 PRB at Itbs 18 -> 47 -> 47000 bytes/sec· |
| 95 AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,3000,1383000,1239000)); |
| 96 AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,3000,1383000,389000)); |
| 97 AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,3000,1383000,193000)); |
| 98 AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,3000,1383000,97000)); |
| 99 AddTestCase (new LenaTtaFfMacSchedulerTestCase (15,0,3000,1383000,47000)); |
| 100 · |
| 101 // DOWNLINK - DISTANCE 6000 -> MCS 16 -> Itbs 15 (from table 7.1.7.2.1-1 of 36
.213) |
| 102 // 1 user -> 24 PRB at Itbs 15 -> 903 -> 903000 bytes/sec for first UE; 0 byte
s/sec for other UEs |
| 103 // 3 users -> 903000 among 3 users -> 903000 bytes/sec for first UE; 0 bytes/s
ec for other UEs |
| 104 // 6 users -> 903000 among 6 users -> 903000 bytes/sec for first UE; 0 bytes/s
ec for other UEs |
| 105 // 12 users -> 903000 among 12 users -> 903000 bytes/sec for first UE; 0 bytes
/sec for other UEs |
| 106 // 15 users -> 903000 among 15 users -> 903000 bytes/sec for first UE; 0 bytes
/sec for other UEs |
| 107 // UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.2
13) |
| 108 // 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec |
| 109 // 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec |
| 110 // 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 bytes/sec |
| 111 // 12 users -> 2 PRB at Itbs 11 -> 47 -> 47000 bytes/sec |
| 112 // 15 users -> 1 PRB at Itbs 11 -> 22 -> 22000 bytes/sec |
| 113 AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,6000,903000,621000)); |
| 114 AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,6000,903000,201000)); |
| 115 AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,6000,903000,97000)); |
| 116 AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,6000,903000,47000)); |
| 117 AddTestCase (new LenaTtaFfMacSchedulerTestCase (15,0,6000,903000,22000)); |
| 118 · |
| 119 // DOWNLINK - DISTANCE 9000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36
.213) |
| 120 // 1 user -> 24 PRB at Itbs 11 -> 597 -> 597000 bytes/sec |
| 121 // 3 users -> 597000 among 3 users -> 199000 bytes/sec |
| 122 // 6 users -> 597000 among 6 users -> 99500 bytes/sec |
| 123 // 12 users -> 597000 among 12 users -> 49750 bytes/sec |
| 124 // 15 users -> 597000 among 15 users -> 39800 bytes/sec· |
| 125 // UPLINK - DISTANCE 9000 -> MCS 8 -> Itbs 8 (from table 7.1.7.2.1-1 of 36.213
) |
| 126 // 1 user -> 24 PRB at Itbs 8 -> 437 -> 437000 bytes/sec |
| 127 // 3 users -> 8 PRB at Itbs 8 -> 137 -> 137000 bytes/sec |
| 128 // 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec |
| 129 // 12 users -> 2 PRB at Itbs 8 -> 32 -> 32000 bytes/sec |
| 130 // 15 users -> 1 PRB at Itbs 8 -> 15 -> 15000 bytes/sec· |
| 131 AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,9000,597000,437000)); |
| 132 AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,9000,597000,137000)); |
| 133 AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,9000,597000,67000)); |
| 134 AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,9000,597000,32000)); |
| 135 AddTestCase (new LenaTtaFfMacSchedulerTestCase (15,0,9000,597000,15000)); |
| 136 · |
| 137 // DONWLINK - DISTANCE 15000 -> MCS 6 -> Itbs 6 (from table 7.1.7.2.1-1 of 36.
213) |
| 138 // 1 user -> 24 PRB at Itbs 6 -> 309 -> 309000 bytes/sec |
| 139 // 3 users -> 309000 among 3 users -> 103000 bytes/sec |
| 140 // 6 users -> 309000 among 6 users -> 51500 bytes/sec |
| 141 // 12 users -> 309000 among 12 users -> 25750 bytes/sec |
| 142 // 15 users -> 309000 among 15 users -> 20600 bytes/sec |
| 143 // UPLINK - DISTANCE 15000 -> MCS 6 -> Itbs 6 (from table 7.1.7.2.1-1 of 36.21
3) |
| 144 // 1 user -> 25 PRB at Itbs 6 -> 233 -> 233000 bytes/sec |
| 145 // 3 users -> 8 PRB at Itbs 6 -> 69 -> 69000 bytes/sec |
| 146 // 6 users -> 4 PRB at Itbs 6 -> 32 -> 32000 bytes/sec |
| 147 // 12 users -> 2 PRB at Itbs 6 -> 15 -> 15000 bytes/sec |
| 148 // 15 users -> 1 PRB at Itbs 6 -> 7 -> 7000 bytes/sec |
| 149 AddTestCase (new LenaTtaFfMacSchedulerTestCase (1,0,15000,309000,233000)); |
| 150 AddTestCase (new LenaTtaFfMacSchedulerTestCase (3,0,15000,309000,69000)); |
| 151 AddTestCase (new LenaTtaFfMacSchedulerTestCase (6,0,15000,309000,32000)); |
| 152 AddTestCase (new LenaTtaFfMacSchedulerTestCase (12,0,15000,309000,15000)); |
| 153 AddTestCase (new LenaTtaFfMacSchedulerTestCase (15,0,15000,309000,7000)); |
| 154 |
| 155 · |
| 156 } |
| 157 |
| 158 static LenaTestTtaFfMacSchedulerSuite lenaTestTtaFfMacSchedulerSuite; |
| 159 |
| 160 |
| 161 // --------------- T E S T - C A S E ------------------------------ |
| 162 |
| 163 |
| 164 std::string· |
| 165 LenaTtaFfMacSchedulerTestCase::BuildNameString (uint16_t nUser, uint16_t dist) |
| 166 { |
| 167 std::ostringstream oss; |
| 168 oss << nUser << " UEs, distance " << dist << " m"; |
| 169 return oss.str (); |
| 170 } |
| 171 |
| 172 LenaTtaFfMacSchedulerTestCase::LenaTtaFfMacSchedulerTestCase (uint16_t nUser, ui
nt16_t nLc, uint16_t dist, double thrRefDl, double thrRefUl) |
| 173 : TestCase (BuildNameString (nUser, dist)), |
| 174 m_nUser (nUser), |
| 175 m_nLc (nLc), |
| 176 m_dist (dist), |
| 177 m_thrRefDl (thrRefDl), |
| 178 m_thrRefUl (thrRefUl) |
| 179 { |
| 180 } |
| 181 |
| 182 LenaTtaFfMacSchedulerTestCase::~LenaTtaFfMacSchedulerTestCase () |
| 183 { |
| 184 } |
| 185 |
| 186 void |
| 187 LenaTtaFfMacSchedulerTestCase::DoRun (void) |
| 188 { |
| 189 Config::SetDefault ("ns3::LteAmc::AmcModel", EnumValue (LteAmc::PiroEW2010)); |
| 190 Config::SetDefault ("ns3::LteAmc::Ber", DoubleValue (0.00005)); |
| 191 Config::SetDefault ("ns3::LteSpectrumPhy::PemEnabled", BooleanValue (false)); |
| 192 LogComponentDisableAll (LOG_LEVEL_ALL); |
| 193 // LogComponentEnable ("LteEnbRrc", LOG_LEVEL_ALL); |
| 194 // LogComponentEnable ("LteUeRrc", LOG_LEVEL_ALL); |
| 195 // LogComponentEnable ("LteEnbMac", LOG_LEVEL_ALL); |
| 196 // LogComponentEnable ("LteUeMac", LOG_LEVEL_ALL); |
| 197 // LogComponentEnable ("LteRlc", LOG_LEVEL_ALL); |
| 198 // |
| 199 // LogComponentEnable ("LtePhy", LOG_LEVEL_ALL); |
| 200 // LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL); |
| 201 // LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL); |
| 202 |
| 203 // LogComponentEnable ("LteSpectrumPhy", LOG_LEVEL_ALL); |
| 204 // LogComponentEnable ("LteInterference", LOG_LEVEL_ALL); |
| 205 // LogComponentEnable ("LteSinrChunkProcessor", LOG_LEVEL_ALL); |
| 206 //· |
| 207 // LogComponentEnable ("LtePropagationLossModel", LOG_LEVEL_ALL); |
| 208 // LogComponentEnable ("LossModel", LOG_LEVEL_ALL); |
| 209 // LogComponentEnable ("ShadowingLossModel", LOG_LEVEL_ALL); |
| 210 // LogComponentEnable ("PenetrationLossModel", LOG_LEVEL_ALL); |
| 211 // LogComponentEnable ("MultipathLossModel", LOG_LEVEL_ALL); |
| 212 // LogComponentEnable ("PathLossModel", LOG_LEVEL_ALL); |
| 213 //· |
| 214 // LogComponentEnable ("LteNetDevice", LOG_LEVEL_ALL); |
| 215 // LogComponentEnable ("LteUeNetDevice", LOG_LEVEL_ALL); |
| 216 // LogComponentEnable ("LteEnbNetDevice", LOG_LEVEL_ALL); |
| 217 |
| 218 // LogComponentEnable ("TtaFfMacScheduler", LOG_LEVEL_ALL); |
| 219 LogComponentEnable ("LenaTestTtaFfMacCheduler", LOG_LEVEL_ALL); |
| 220 // LogComponentEnable ("LteAmc", LOG_LEVEL_ALL); |
| 221 // LogComponentEnable ("RadioBearerStatsCalculator", LOG_LEVEL_ALL); |
| 222 |
| 223 /** |
| 224 * Initialize Simulation Scenario: 1 eNB and m_nUser UEs |
| 225 */ |
| 226 |
| 227 Ptr<LteHelper> lteHelper = CreateObject<LteHelper> (); |
| 228 ·· |
| 229 lteHelper->SetAttribute ("PathlossModel", StringValue ("ns3::FriisSpectrumProp
agationLossModel")); |
| 230 |
| 231 // Create Nodes: eNodeB and UE |
| 232 NodeContainer enbNodes; |
| 233 NodeContainer ueNodes; |
| 234 enbNodes.Create (1); |
| 235 ueNodes.Create (m_nUser); |
| 236 |
| 237 // Install Mobility Model |
| 238 MobilityHelper mobility; |
| 239 mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); |
| 240 mobility.Install (enbNodes); |
| 241 mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); |
| 242 mobility.Install (ueNodes); |
| 243 |
| 244 // Create Devices and install them in the Nodes (eNB and UE) |
| 245 NetDeviceContainer enbDevs; |
| 246 NetDeviceContainer ueDevs; |
| 247 lteHelper->SetSchedulerType ("ns3::TtaFfMacScheduler"); |
| 248 enbDevs = lteHelper->InstallEnbDevice (enbNodes); |
| 249 ueDevs = lteHelper->InstallUeDevice (ueNodes); |
| 250 |
| 251 // Attach a UE to a eNB |
| 252 lteHelper->Attach (ueDevs, enbDevs.Get (0)); |
| 253 |
| 254 // Activate an EPS bearer |
| 255 enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE; |
| 256 EpsBearer bearer (q); |
| 257 lteHelper->ActivateEpsBearer (ueDevs, bearer, EpcTft::Default ()); |
| 258 |
| 259 Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> (
); |
| 260 Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy (); |
| 261 enbPhy->SetAttribute ("TxPower", DoubleValue (30.0)); |
| 262 enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0)); |
| 263 |
| 264 // Set UEs' position and power |
| 265 for (int i = 0; i < m_nUser; i++) |
| 266 { |
| 267 Ptr<ConstantPositionMobilityModel> mm = ueNodes.Get (i)->GetObject<Constan
tPositionMobilityModel> (); |
| 268 mm->SetPosition (Vector (m_dist, 0.0, 0.0)); |
| 269 Ptr<LteUeNetDevice> lteUeDev = ueDevs.Get (i)->GetObject<LteUeNetDevice> (
); |
| 270 Ptr<LteUePhy> uePhy = lteUeDev->GetPhy (); |
| 271 uePhy->SetAttribute ("TxPower", DoubleValue (23.0)); |
| 272 uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0)); |
| 273 } |
| 274 |
| 275 lteHelper->EnableRlcTraces (); |
| 276 lteHelper->EnableMacTraces (); |
| 277 |
| 278 |
| 279 double simulationTime = 1.0; |
| 280 double tolerance = 0.1; |
| 281 Simulator::Stop (Seconds (simulationTime)); |
| 282 |
| 283 Ptr<RadioBearerStatsCalculator> rlcStats = lteHelper->GetRlcStats (); |
| 284 rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (simulationTime)))
; |
| 285 |
| 286 Simulator::Run (); |
| 287 |
| 288 /** |
| 289 * Check that the downlink assignation is done in a "throughput to average" ma
nner |
| 290 */ |
| 291 NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s) at distance " << m_dist
); |
| 292 std::vector <uint64_t> dlDataRxed; |
| 293 for (int i = 0; i < m_nUser; i++) |
| 294 { |
| 295 // get the imsi |
| 296 uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi (); |
| 297 // get the lcId |
| 298 uint8_t lcId = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetRrc ()->Ge
tLcIdVector ().at (0); |
| 299 dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId)); |
| 300 NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (doub
le)dlDataRxed.at (i) << " thr " << (double)dlDataRxed.at (i) / simulationTime <
< " ref " << m_thrRefDl); |
| 301 } |
| 302 /** |
| 303 * Check that the assignation is done in a "throughput to average" manner among
users |
| 304 * with equal SINRs: all bandwidth should be allocated to the first UE in scrip
t |
| 305 */ |
| 306 for (int i = 0; i < 1; i++) |
| 307 { |
| 308 if (i == 0) |
| 309 NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataRxed.at (i) / simulationTime,
m_thrRefDl, m_thrRefDl * tolerance, " Invalid Throughput!"); |
| 310 else |
| 311 NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataRxed.at (i) / simulationTime,
0, tolerance, " Invalid Throughput!"); |
| 312 } |
| 313 |
| 314 /** |
| 315 * Check that the uplink assignation is done in a "throughput to average" manne
r |
| 316 */ |
| 317 NS_LOG_INFO ("UL - Test with " << m_nUser << " user(s) at distance " << m_dist
); |
| 318 std::vector <uint64_t> ulDataRxed; |
| 319 for (int i = 0; i < m_nUser; i++) |
| 320 { |
| 321 // get the imsi |
| 322 uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi (); |
| 323 // get the lcId |
| 324 uint8_t lcId = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetRrc ()->Ge
tLcIdVector ().at (0); |
| 325 ulDataRxed.push_back (rlcStats->GetUlRxData (imsi, lcId)); |
| 326 NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (doub
le)ulDataRxed.at (i) << " thr " << (double)ulDataRxed.at (i) / simulationTime <
< " ref " << m_thrRefUl); |
| 327 } |
| 328 /** |
| 329 * Check that the assignation is done in a "throughput to average" manner among
users |
| 330 * with equal SINRs: the bandwidht should be distributed according to the· |
| 331 * ratio of the estimated throughput per TTI of each user; therefore equally· |
| 332 * partitioning the whole bandwidth achievable from a single users in a TTI |
| 333 * |
| 334 */ |
| 335 for (int i = 0; i < 1; i++) |
| 336 { |
| 337 NS_TEST_ASSERT_MSG_EQ_TOL ((double)ulDataRxed.at (i) / simulationTime, m_t
hrRefUl, m_thrRefUl * tolerance, " Unfair Throughput!"); |
| 338 } |
| 339 Simulator::Destroy (); |
| 340 |
| 341 } |
| 342 |
OLD | NEW |