21 #include "ns3/simulator.h"
22 #include "ns3/boolean.h"
23 #include "ns3/config.h"
24 #include "ns3/waypoint-mobility-model.h"
33 :
TestCase (lazy ?
"Check Waypoint Mobility Model LAZY notification accuracy"
34 :
"Check Waypoint Mobility Model NON-LAZY notification accuracy"),
43 std::vector<Ptr<MobilityModel> > mobilityStack;
44 uint32_t mobilityCount;
45 uint32_t waypointCount;
46 std::deque<Waypoint> waypoints;
49 virtual void DoRun (
void);
51 void ForceUpdates (
void);
58 mobilityStack.clear();
69 mobilityFactory.
SetTypeId (
"ns3::WaypointMobilityModel");
73 for (uint32_t i = 0; i < mobilityCount; i++)
79 mobilityStack.push_back (model);
86 for ( uint32_t iw = 0; iw < waypointCount; ++iw )
89 waypoints.push_back (wpt);
93 std::vector<Ptr<MobilityModel> >::iterator i;
94 for (i = mobilityStack.begin (); i != mobilityStack.end (); ++i)
98 for ( std::deque<Waypoint>::iterator w = waypoints.begin (); w != waypoints.end (); ++w )
105 for (
double updateTime = 0.5; updateTime <= ((double)waypointCount + 1.5); updateTime += 1.0 )
110 Config::Connect (
"/NodeList/*/$ns3::WaypointMobilityModel/CourseChange",
111 MakeCallback (&WaypointMobilityModelNotifyTest::CourseChangeCallback,
this));
118 WaypointMobilityModelNotifyTest::ForceUpdates (
void)
120 std::vector<Ptr<MobilityModel> >::iterator i;
121 for (i = mobilityStack.begin (); i != mobilityStack.end (); ++i)
128 WaypointMobilityModelNotifyTest::CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
131 const double sec = now.GetSeconds ();
132 Ptr<const WaypointMobilityModel> mob = model->GetObject<WaypointMobilityModel> ();
134 NS_TEST_EXPECT_MSG_EQ (now, mob->m_current.time,
"Waypoint time not properly updated");
139 NS_TEST_EXPECT_MSG_EQ (sec - ((
double)((
int)sec)) + sec, sec,
140 "Course didn't change on one second time boundary with NON-LAZY notifcations");
145 NS_TEST_EXPECT_MSG_EQ (sec - ((
double)((
int)sec)), 0.5,
146 "Course didn't change between waypoints with LAZY notifications");
157 } g_waypointMobilityModelTestSuite;
smart pointer class similar to boost::intrusive_ptr
void AddWaypoint(const Waypoint &waypoint)
void SetTypeId(TypeId tid)
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
void Connect(std::string path, const CallbackBase &cb)
TestSuite(std::string name, Type type=UNIT)
Constuct a new test suite.
Keep track of the current position and velocity of an object.
Ptr< Object > Create(void) const
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
TestCase(std::string name)
static void Destroy(void)
void Set(std::string name, const AttributeValue &value)
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual test case to this test suite.
virtual void DoTeardown(void)
Implementation to do any local setup required for this test case.
instantiate subclasses of ns3::Object.
Time Seconds(double seconds)
create ns3::Time instances in units of seconds.
Waypoint-based mobility model.
Ptr< T > GetObject(void) const
virtual void DoRun(void)
Implementation to actually run this test case.