src/buildings/test/building-position-allocator-test.cc
author Peter D. Barnes, Jr. <barnes26@llnl.gov>
Fri, 26 Sep 2014 15:51:00 -0700
changeset 10968 2d29fee2b7b8
parent 10553 8c347165bb56
permissions -rw-r--r--
[Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     2
/*
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     3
 * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     4
 *
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     8
 *
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    12
 * GNU General Public License for more details.
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    13
 *
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    17
 *
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    18
 * Author: Nicola Baldo <nbaldo@cttc.es>
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    19
 */
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    20
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    21
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    22
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    23
#include "ns3/log.h"
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    24
#include "ns3/test.h"
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    25
#include <ns3/building-position-allocator.h>
10081
f0879d02aafd Renaming of file buildings-mobility-model in mobility-building-info
Marco Miozzo <marco.miozzo@cttc.es>
parents: 10080
diff changeset
    26
#include <ns3/mobility-building-info.h>
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
    27
#include <ns3/constant-position-mobility-model.h>
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
    28
#include <ns3/mobility-model.h>
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    29
#include <ns3/building.h>
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    30
#include <ns3/buildings-helper.h>
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    31
#include <ns3/mobility-helper.h>
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    32
#include <ns3/simulator.h>
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    33
#include <map>
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    34
10553
8c347165bb56 Move tests outside ns3 namespace
Vedran Miletić <rivanvx@gmail.com>
parents: 10081
diff changeset
    35
using namespace ns3;
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    36
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10553
diff changeset
    37
NS_LOG_COMPONENT_DEFINE ("BuildingPositionAllocatorTest");
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    38
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    39
struct Room
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    40
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    41
  Room (uint32_t xx, uint32_t yy, uint32_t zz);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    42
  uint32_t x;
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    43
  uint32_t y;
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    44
  uint32_t z;
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    45
};
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    46
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    47
Room::Room (uint32_t xx, uint32_t yy, uint32_t zz)
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    48
  : x (xx),
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    49
    y (yy),
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    50
    z (zz)
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    51
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    52
}
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    53
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    54
bool
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    55
operator < (const Room& a, const Room& b)
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    56
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    57
  return ( (a.x < b.x) 
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    58
           || ( (a.x == b.x) && (a.y < b.y) ) 
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    59
           || ( (a.x == b.x) && (a.y == b.y) && (a.z < b.z) ));
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    60
}
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    61
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    62
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    63
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    64
class RandomRoomPositionAllocatorTestCase : public TestCase
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    65
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    66
public:
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    67
  RandomRoomPositionAllocatorTestCase ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    68
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    69
private:
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    70
  virtual void DoRun (void);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    71
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    72
};
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    73
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    74
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    75
RandomRoomPositionAllocatorTestCase::RandomRoomPositionAllocatorTestCase ()
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    76
  : TestCase ("RandomRoom, 12 rooms, 24 nodes")
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    77
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    78
}
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    79
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    80
void
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    81
RandomRoomPositionAllocatorTestCase::DoRun ()
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    82
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    83
  NS_LOG_FUNCTION (this);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    84
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    85
 
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    86
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    87
  NS_LOG_LOGIC ("create building");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    88
  Ptr<Building> b = CreateObject<Building> ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    89
  b->SetBoundaries (Box (1, 3, 1, 4, 1, 3));
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    90
  b->SetNFloors (2);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    91
  b->SetNRoomsX (2);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    92
  b->SetNRoomsY (3);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    93
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    94
  NodeContainer nodes;
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    95
  nodes.Create (24);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    96
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    97
  MobilityHelper mobility;
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
    98
  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    99
  Ptr<PositionAllocator> positionAlloc = CreateObject<RandomRoomPositionAllocator> ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   100
  mobility.SetPositionAllocator (positionAlloc);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   101
  mobility.Install (nodes);
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
   102
  BuildingsHelper::Install (nodes);
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   103
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   104
  BuildingsHelper::MakeMobilityModelConsistent ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   105
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   106
  std::map<Room, uint32_t> roomCounter;
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   107
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   108
  for (NodeContainer::Iterator it = nodes.Begin (); it != nodes.End (); ++it)
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   109
    {
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   110
      Ptr<MobilityModel> mm = (*it)->GetObject<MobilityModel> ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   111
      NS_ASSERT_MSG (mm, "no mobility model aggregated to this node");
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
   112
      Ptr<MobilityBuildingInfo> bmm = mm->GetObject<MobilityBuildingInfo> ();
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
   113
      NS_ASSERT_MSG (bmm, "MobilityBuildingInfo has not been aggregated to this node mobility model");
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   114
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   115
      NS_TEST_ASSERT_MSG_EQ (bmm->IsIndoor (), true, "node should be indoor");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   116
      Room r (bmm->GetRoomNumberX (), bmm->GetRoomNumberY (), bmm->GetFloorNumber ());
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   117
      ++(roomCounter[r]);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   118
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
   119
      Vector p = mm->GetPosition ();
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   120
      NS_TEST_ASSERT_MSG_GT (p.x, bmm->GetRoomNumberX (), "wrong x value");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   121
      NS_TEST_ASSERT_MSG_LT (p.x, bmm->GetRoomNumberX () + 1, "wrong x value");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   122
      NS_TEST_ASSERT_MSG_GT (p.y, bmm->GetRoomNumberY (), "wrong y value");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   123
      NS_TEST_ASSERT_MSG_LT (p.y, bmm->GetRoomNumberY () + 1, "wrong y value");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   124
      NS_TEST_ASSERT_MSG_GT (p.z, bmm->GetFloorNumber (), "wrong z value");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   125
      NS_TEST_ASSERT_MSG_LT (p.z, bmm->GetFloorNumber () + 1, "wrong z value");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   126
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   127
    }
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   128
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   129
  for (std::map<Room, uint32_t>::iterator it = roomCounter.begin (); it != roomCounter.end (); ++it)
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   130
    {
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   131
      // random selection is done without replacement until the set of
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   132
      // eligible room is empty, at which point the set is filled
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   133
      // again. Hence with 24 nodes and 12 rooms we expect 2 nodes per room
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   134
      NS_TEST_ASSERT_MSG_EQ (it->second, 2, "expected 2 nodes per room");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   135
    }
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   136
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   137
  NS_TEST_ASSERT_MSG_EQ (roomCounter.size (), 12, "expected 12 rooms allocated");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   138
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   139
  Simulator::Destroy ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   140
}
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   141
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   142
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   143
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   144
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   145
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   146
class SameRoomPositionAllocatorTestCase : public TestCase
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   147
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   148
public:
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   149
  SameRoomPositionAllocatorTestCase ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   150
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   151
private:
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   152
  virtual void DoRun (void);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   153
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   154
};
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   155
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   156
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   157
SameRoomPositionAllocatorTestCase::SameRoomPositionAllocatorTestCase ()
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   158
  : TestCase ("SameRoom 48 nodes")
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   159
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   160
}
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   161
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   162
void
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   163
SameRoomPositionAllocatorTestCase::DoRun ()
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   164
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   165
  NS_LOG_FUNCTION (this);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   166
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   167
 
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   168
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   169
  NS_LOG_LOGIC ("create building");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   170
  Ptr<Building> b = CreateObject<Building> ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   171
  b->SetBoundaries (Box (-10, -6, 20, 26, -1, 5));
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   172
  b->SetNFloors (2);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   173
  b->SetNRoomsX (2);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   174
  b->SetNRoomsY (3);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   175
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   176
  NodeContainer nodes;
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   177
  nodes.Create (24);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   178
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   179
  MobilityHelper mobility;
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
   180
  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   181
  Ptr<PositionAllocator> positionAlloc = CreateObject<RandomRoomPositionAllocator> ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   182
  mobility.SetPositionAllocator (positionAlloc);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   183
  mobility.Install (nodes);
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
   184
  BuildingsHelper::Install (nodes);
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   185
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   186
  NodeContainer copyNodes;
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   187
  copyNodes.Create (48);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   188
  positionAlloc = CreateObject<SameRoomPositionAllocator> (nodes);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   189
  mobility.SetPositionAllocator (positionAlloc);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   190
  mobility.Install (copyNodes);
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
   191
  BuildingsHelper::Install (copyNodes);
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   192
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   193
  BuildingsHelper::MakeMobilityModelConsistent ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   194
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   195
  std::map<Room, uint32_t> roomCounter;
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   196
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   197
  for (NodeContainer::Iterator it = copyNodes.Begin (); it != copyNodes.End (); ++it)
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   198
    {
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   199
      Ptr<MobilityModel> mm = (*it)->GetObject<MobilityModel> ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   200
      NS_ASSERT_MSG (mm, "no mobility model aggregated to this node");
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
   201
      Ptr<MobilityBuildingInfo> bmm = mm->GetObject<MobilityBuildingInfo> ();
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9266
diff changeset
   202
      NS_ASSERT_MSG (bmm, "MobilityBuildingInfo has not been aggregated to this node mobility model");
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   203
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   204
      NS_TEST_ASSERT_MSG_EQ (bmm->IsIndoor (), true, "node should be indoor");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   205
      Room r (bmm->GetRoomNumberX (), bmm->GetRoomNumberY (), bmm->GetFloorNumber ());
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   206
      ++(roomCounter[r]);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   207
    }
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   208
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   209
  for (std::map<Room, uint32_t>::iterator it = roomCounter.begin (); it != roomCounter.end (); ++it)
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   210
    {
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   211
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   212
      NS_TEST_ASSERT_MSG_EQ (it->second, 4, "expected 4 nodes per room");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   213
    }
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   214
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   215
  NS_TEST_ASSERT_MSG_EQ (roomCounter.size (), 12, "expected 12 rooms allocated");
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   216
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   217
  Simulator::Destroy ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   218
}
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   219
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   220
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   221
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   222
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   223
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   224
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   225
class BuildingPositionAllocatorTestSuite : public TestSuite
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   226
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   227
public:
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   228
  BuildingPositionAllocatorTestSuite ();
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   229
};
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   230
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   231
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   232
BuildingPositionAllocatorTestSuite::BuildingPositionAllocatorTestSuite ()
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   233
  : TestSuite ("building-position-allocator", UNIT)
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   234
{
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   235
  NS_LOG_FUNCTION (this);
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   236
9266
d26408b17360 bug 1563: get rid of default argument value in AddTestCase
Nicola Baldo <nbaldo@cttc.es>
parents: 8822
diff changeset
   237
  AddTestCase (new RandomRoomPositionAllocatorTestCase, TestCase::QUICK);
d26408b17360 bug 1563: get rid of default argument value in AddTestCase
Nicola Baldo <nbaldo@cttc.es>
parents: 8822
diff changeset
   238
  AddTestCase (new SameRoomPositionAllocatorTestCase, TestCase::QUICK);
8767
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   239
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   240
}
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   241
76e71d929a3f added building-position-allocator test
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   242
static BuildingPositionAllocatorTestSuite buildingsPositionAllocatorTestSuiteInstance;