A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
steady-state-random-waypoint-mobility-model-test.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2009 IITP RAS
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Author: Denis Fakhriev <fakhriev@iitp.ru>
18 */
19#include "ns3/boolean.h"
20#include "ns3/config.h"
21#include "ns3/double.h"
22#include "ns3/rng-seed-manager.h"
23#include "ns3/simulator.h"
24#include "ns3/steady-state-random-waypoint-mobility-model.h"
25#include "ns3/test.h"
26
27#include <cmath>
28
29using namespace ns3;
30
37{
38 public:
40 : TestCase("Check steady-state rwp mobility model velocity and position distributions")
41 {
42 }
43
45 {
46 }
47
48 private:
49 std::vector<Ptr<MobilityModel>> mobilityStack;
50 double count;
51 private:
52 void DoRun() override;
53 void DoTeardown() override;
55 void DistribCompare();
56};
57
58void
60{
61 mobilityStack.clear();
62}
63
64void
66{
68
69 // Total simulation time, seconds
70 double totalTime = 1000;
71
72 ObjectFactory mobilityFactory;
73 mobilityFactory.SetTypeId("ns3::SteadyStateRandomWaypointMobilityModel");
74 mobilityFactory.Set("MinSpeed", DoubleValue(0.01));
75 mobilityFactory.Set("MaxSpeed", DoubleValue(20.0));
76 mobilityFactory.Set("MinPause", DoubleValue(0.0));
77 mobilityFactory.Set("MaxPause", DoubleValue(0.0));
78 mobilityFactory.Set("MinX", DoubleValue(0));
79 mobilityFactory.Set("MaxX", DoubleValue(1000));
80 mobilityFactory.Set("MinY", DoubleValue(0));
81 mobilityFactory.Set("MaxY", DoubleValue(600));
82
83 // Populate the vector of mobility models.
84 count = 10000;
85 for (uint32_t i = 0; i < count; i++)
86 {
87 // Create a new mobility model.
88 Ptr<MobilityModel> model = mobilityFactory.Create()->GetObject<MobilityModel>();
89 model->AssignStreams(100 * (i + 1));
90 // Add this mobility model to the stack.
91 mobilityStack.push_back(model);
93 }
94
97 Simulator::Stop(Seconds(totalTime));
100}
101
102void
104{
105 double velocity;
106 double sum_x = 0;
107 double sum_y = 0;
108 double sum_v = 0;
109 for (auto i = mobilityStack.begin(); i != mobilityStack.end(); ++i)
110 {
111 auto model = (*i);
112 velocity =
113 std::sqrt(std::pow(model->GetVelocity().x, 2) + std::pow(model->GetVelocity().y, 2));
114 sum_x += model->GetPosition().x;
115 sum_y += model->GetPosition().y;
116 sum_v += velocity;
117 }
118 double mean_x = sum_x / count;
119 double mean_y = sum_y / count;
120 double mean_v = sum_v / count;
121
122 NS_TEST_EXPECT_MSG_EQ_TOL(mean_x, 500, 25.0, "Got unexpected x-position mean value");
123 NS_TEST_EXPECT_MSG_EQ_TOL(mean_y, 300, 15.0, "Got unexpected y-position mean value");
124 NS_TEST_EXPECT_MSG_EQ_TOL(mean_v, 2.6, 0.13, "Got unexpected velocity mean value");
125
126 sum_x = 0;
127 sum_y = 0;
128 sum_v = 0;
129 double tmp;
130 for (auto i = mobilityStack.begin(); i != mobilityStack.end(); ++i)
131 {
132 auto model = (*i);
133 velocity =
134 std::sqrt(std::pow(model->GetVelocity().x, 2) + std::pow(model->GetVelocity().y, 2));
135 tmp = model->GetPosition().x - mean_x;
136 sum_x += tmp * tmp;
137 tmp = model->GetPosition().y - mean_y;
138 sum_y += tmp * tmp;
139 tmp = velocity - mean_v;
140 sum_v += tmp * tmp;
141 }
142 double dev_x = std::sqrt(sum_x / (count - 1));
143 double dev_y = std::sqrt(sum_y / (count - 1));
144 double dev_v = std::sqrt(sum_v / (count - 1));
145
146 NS_TEST_EXPECT_MSG_EQ_TOL(dev_x, 230, 10.0, "Got unexpected x-position standard deviation");
147 NS_TEST_EXPECT_MSG_EQ_TOL(dev_y, 140, 7.0, "Got unexpected y-position standard deviation");
148 NS_TEST_EXPECT_MSG_EQ_TOL(dev_v, 4.4, 0.22, "Got unexpected velocity standard deviation");
149}
150
157{
159 : TestSuite("steady-state-rwp-mobility-model", Type::UNIT)
160 {
161 AddTestCase(new SteadyStateRandomWaypointTest, TestCase::Duration::QUICK);
162 }
std::vector< Ptr< MobilityModel > > mobilityStack
modility model
void DoRun() override
Implementation to actually run this TestCase.
void DoTeardown() override
Implementation to do any local setup required for this TestCase.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:42
Keep track of the current position and velocity of an object.
Instantiate subclasses of ns3::Object.
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
void Set(const std::string &name, const AttributeValue &value, Args &&... args)
Set an attribute to be set during construction.
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
void Initialize()
Invoke DoInitialize on all Objects aggregated to this one.
Definition: object.cc:214
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
Definition: object.h:522
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
static void SetSeed(uint32_t seed)
Set the seed.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:571
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:142
static void Run()
Run the simulation.
Definition: simulator.cc:178
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:186
encapsulates test code
Definition: test.h:1061
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:301
A suite of tests to run.
Definition: test.h:1268
Type
Type of test.
Definition: test.h:1275
static constexpr auto UNIT
Definition: test.h:1286
SteadyStateRandomWaypointTestSuite g_steadyStateRandomWaypointTestSuite
the test suite
#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 ...
Definition: test.h:511
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1326
Every class exported by the ns3 library is enclosed in the ns3 namespace.