packages/uan/test/uan-test.cc
author Mitch Watrous <watrous@u.washington.edu>
Tue, 26 Oct 2010 08:41:33 -0700
changeset 6622 66d4eab148ce
permissions -rw-r--r--
Added UAN package
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6622
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     2
/*
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     3
 * Copyright (c) 2009 University of Washington
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     4
 *
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     8
 *
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    12
 * GNU General Public License for more details.
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    13
 *
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    17
 *
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    18
 * Author: Leonard Tracy <lentracy@gmail.com>
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    19
 */
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    20
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    21
#include "ns3/uan-net-device.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    22
#include "ns3/uan-channel.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    23
#include "ns3/uan-mac-aloha.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    24
#include "ns3/uan-phy-gen.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    25
#include "ns3/uan-transducer-hd.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    26
#include "ns3/uan-prop-model-ideal.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    27
#include "ns3/constant-position-mobility-model.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    28
#include "ns3/simulator.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    29
#include "ns3/test.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    30
#include "ns3/node.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    31
#include "ns3/object-factory.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    32
#include "ns3/pointer.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    33
#include "ns3/callback.h"
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    34
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    35
using namespace ns3;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    36
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    37
class UanTest : public TestCase
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    38
{
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    39
public:
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    40
  UanTest ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    41
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    42
  virtual bool DoRun (void);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    43
private:
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    44
  Ptr<UanNetDevice> CreateNode (Vector pos, Ptr<UanChannel> chan);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    45
  bool DoPhyTests ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    46
  uint32_t DoOnePhyTest (Time t1, Time t2, uint32_t r1, uint32_t r2, Ptr<UanPropModel> prop, uint32_t mode1 = 0, uint32_t mode2 = 0);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    47
  bool RxPacket (Ptr<NetDevice> dev, Ptr<const Packet> pkt, uint16_t mode, const Address &sender);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    48
  void SendOnePacket (Ptr<UanNetDevice> dev, uint32_t mode);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    49
  ObjectFactory m_phyFac;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    50
  uint32_t m_bytesRx;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    51
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    52
};
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    53
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    54
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    55
UanTest::UanTest () : TestCase ("UAN")
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    56
{
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    57
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    58
}
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    59
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    60
bool
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    61
UanTest::RxPacket (Ptr<NetDevice> dev, Ptr<const Packet> pkt, uint16_t mode, const Address &sender)
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    62
{
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    63
  m_bytesRx += pkt->GetSize ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    64
  return true;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    65
}
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    66
void
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    67
UanTest::SendOnePacket (Ptr<UanNetDevice> dev, uint32_t mode)
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    68
{
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    69
  Ptr<Packet> pkt = Create<Packet> (17);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    70
  dev->Send (pkt, dev->GetBroadcast (), mode);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    71
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    72
}
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    73
Ptr<UanNetDevice>
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    74
UanTest::CreateNode (Vector pos, Ptr<UanChannel> chan)
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    75
{
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    76
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    77
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    78
  Ptr<UanPhy> phy = m_phyFac.Create<UanPhy> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    79
  Ptr<Node> node = CreateObject<Node> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    80
  Ptr<UanNetDevice> dev = CreateObject<UanNetDevice> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    81
  Ptr<UanMacAloha> mac = CreateObject<UanMacAloha> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    82
  Ptr<ConstantPositionMobilityModel> mobility = CreateObject<ConstantPositionMobilityModel> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    83
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    84
  Ptr<UanTransducerHd> trans = CreateObject<UanTransducerHd> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    85
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    86
  mobility->SetPosition (pos);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    87
  node->AggregateObject (mobility);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    88
  mac->SetAddress (UanAddress::Allocate ());
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    89
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    90
  dev->SetPhy (phy);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    91
  dev->SetMac (mac);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    92
  dev->SetChannel (chan);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    93
  dev->SetTransducer (trans);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    94
  node->AddDevice (dev);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    95
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    96
  return dev;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    97
}
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    98
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    99
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   100
uint32_t
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   101
UanTest::DoOnePhyTest (Time txTime1,
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   102
                       Time txTime2,
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   103
                       uint32_t r1,
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   104
                       uint32_t r2,
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   105
                       Ptr<UanPropModel> prop,
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   106
                       uint32_t mode1,
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   107
                       uint32_t mode2)
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   108
{
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   109
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   110
  Ptr<UanChannel> channel = CreateObject<UanChannel> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   111
  channel->SetAttribute ("PropagationModel", PointerValue (prop));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   112
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   113
  Ptr<UanNetDevice> dev0 = CreateNode (Vector (r1,50,50), channel);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   114
  Ptr<UanNetDevice> dev1 = CreateNode (Vector (0,50,50), channel);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   115
  Ptr<UanNetDevice> dev2 = CreateNode (Vector (r1 + r2, 50, 50), channel);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   116
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   117
  dev0->SetReceiveCallback (MakeCallback (&UanTest::RxPacket, this));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   118
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   119
  Simulator::Schedule (txTime1, &UanTest::SendOnePacket, this, dev1, mode1);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   120
  Simulator::Schedule (txTime2, &UanTest::SendOnePacket, this, dev2, mode2);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   121
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   122
  m_bytesRx = 0;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   123
  Simulator::Stop (Seconds (20.0));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   124
  Simulator::Run ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   125
  Simulator::Destroy ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   126
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   127
  return m_bytesRx;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   128
}
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   129
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   130
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   131
bool
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   132
UanTest::DoPhyTests ()
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   133
{
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   134
  // Phy Gen / Default PER / Default SINR
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   135
  AttributeList phyList;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   136
  UanModesList mList;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   137
  UanTxMode mode = UanTxModeFactory::CreateMode (UanTxMode::FSK, 80, 80, 10000, 4000, 2, "TestMode");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   138
  mList.AppendMode (UanTxMode (mode));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   139
  Ptr<UanPhyPerGenDefault> perDef = CreateObject<UanPhyPerGenDefault> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   140
  Ptr<UanPhyCalcSinrDefault> sinrDef = CreateObject<UanPhyCalcSinrDefault> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   141
  TypeId phyId = TypeId::LookupByName ("ns3::UanPhyGen");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   142
  m_phyFac.SetTypeId (phyId);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   143
  phyList.SetWithTid (phyId, "PerModel", PointerValue (perDef));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   144
  phyList.SetWithTid (phyId, "SinrModel", PointerValue (sinrDef));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   145
  phyList.SetWithTid (phyId, "SupportedModes", UanModesListValue (mList));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   146
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   147
  m_phyFac.Set (phyList);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   148
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   149
  Ptr<UanPropModelIdeal> prop = CreateObject<UanPropModelIdeal> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   150
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   151
  // No collision (Get 2 packets)
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   152
  NS_TEST_ASSERT_MSG_EQ (DoOnePhyTest (Seconds (1.0), Seconds (3.001), 50, 50, prop),
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   153
                         34, "Should have received 34 bytes from 2 disjoint packets");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   154
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   155
  // Collision (Lose both packets)
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   156
  NS_TEST_ASSERT_MSG_EQ (DoOnePhyTest (Seconds (1.0), Seconds (2.99), 50, 50, prop),
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   157
                         0, "Expected collision resulting in loss of both packets");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   158
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   159
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   160
  // Phy Gen / FH-FSK SINR check
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   161
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   162
  Ptr<UanPhyCalcSinrFhFsk> sinrFhfsk = CreateObject <UanPhyCalcSinrFhFsk> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   163
  phyList.Reset ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   164
  phyList.SetWithTid (phyId, "PerModel", PointerValue (perDef));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   165
  phyList.SetWithTid (phyId, "SinrModel", PointerValue (sinrFhfsk));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   166
  phyList.SetWithTid (phyId, "SupportedModes", UanModesListValue (mList));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   167
  m_phyFac.Set (phyList);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   168
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   169
#ifdef UAN_PROP_BH_INSTALLED
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   170
  Ptr<UanPropModelBh> prop = CreateObject<UanPropModelBh> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   171
#endif // UAN_PROP_BH_INSTALLED
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   172
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   173
  //  No collision (Get 2 packets)
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   174
  NS_TEST_ASSERT_MSG_EQ (DoOnePhyTest (Seconds (1.0), Seconds (3.001), 50, 50, prop),
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   175
                         34, "Should have received 34 bytes from 2 disjoint packets");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   176
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   177
  // Should correctly receive first arriving packet
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   178
  NS_TEST_ASSERT_MSG_EQ (DoOnePhyTest (Seconds (1.0), Seconds (1.0126), 50, 50, prop),
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   179
                         17, "Should have recieved 17 bytes from first arriving packet");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   180
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   181
  // Packets should collide and both be lost
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   182
  NS_TEST_ASSERT_MSG_EQ (DoOnePhyTest (Seconds (1.0), Seconds (1.0 + 7.01 * (13.0 / 80.0)), 50, 50, prop),
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   183
                         0, "Packets should collide, but received data");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   184
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   185
  // Phy Dual
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   186
  UanTxMode mode00 = UanTxModeFactory::CreateMode (UanTxMode::FSK, 80, 80, 10000, 4000, 2, "TestMode00");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   187
  UanTxMode mode10 = UanTxModeFactory::CreateMode (UanTxMode::FSK, 80, 80, 11000, 4000, 2, "TestMode10");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   188
  UanTxMode mode20 = UanTxModeFactory::CreateMode (UanTxMode::FSK, 80, 80, 15000, 4000, 2, "TestMode20");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   189
  UanTxMode mode01 = UanTxModeFactory::CreateMode (UanTxMode::FSK, 80, 80, 10000, 4000, 2, "TestMode01");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   190
  UanTxMode mode11 = UanTxModeFactory::CreateMode (UanTxMode::FSK, 80, 80, 11000, 4000, 2, "TestMode11");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   191
  UanTxMode mode21 = UanTxModeFactory::CreateMode (UanTxMode::FSK, 80, 80, 15000, 4000, 2, "TestMode21");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   192
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   193
  UanModesList m0;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   194
  m0.AppendMode (mode00);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   195
  m0.AppendMode (mode10);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   196
  m0.AppendMode (mode20);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   197
  UanModesList m1;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   198
  m1.AppendMode (mode01);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   199
  m1.AppendMode (mode11);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   200
  m1.AppendMode (mode21);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   201
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   202
  phyId = TypeId::LookupByName ("ns3::UanPhyDual");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   203
  m_phyFac.SetTypeId (phyId);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   204
  phyList.Reset ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   205
  phyList.SetWithTid (phyId, "SupportedModesPhy1", UanModesListValue (m0));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   206
  phyList.SetWithTid (phyId, "SupportedModesPhy2", UanModesListValue (m1));
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   207
  m_phyFac.Set (phyList);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   208
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   209
  // No collision (Get 2 packets)
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   210
  NS_TEST_ASSERT_MSG_EQ (DoOnePhyTest (Seconds (1.0), Seconds (3.01), 50, 50, prop),
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   211
                         34, "Expected no collision");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   212
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   213
  NS_TEST_ASSERT_MSG_EQ (DoOnePhyTest (Seconds (1.0), Seconds (2.99), 50, 50, prop, 0, 0),
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   214
                         0, "Expected collision with both packets lost");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   215
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   216
  NS_TEST_ASSERT_MSG_EQ (DoOnePhyTest (Seconds (1.0), Seconds (2.99), 50, 50, prop, 0, 2),
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   217
                         17, "Expected collision with only one packets lost");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   218
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   219
  NS_TEST_ASSERT_MSG_EQ (DoOnePhyTest (Seconds (1.0), Seconds (2.99), 50, 50, prop, 0, 5),
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   220
                         34, "Expected no collision");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   221
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   222
  NS_TEST_ASSERT_MSG_EQ (DoOnePhyTest (Seconds (1.0), Seconds (2.99), 50, 50, prop, 2, 3),
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   223
                         34, "Expected no collision");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   224
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   225
  return false;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   226
}
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   227
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   228
bool
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   229
UanTest::DoRun (void)
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   230
{
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   231
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   232
  Ptr<UanPhyPerUmodem> per = CreateObject<UanPhyPerUmodem> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   233
  Ptr<Packet> pkt = Create<Packet> (1000);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   234
  double error = per->CalcPer (pkt, 9, UanPhyGen::GetDefaultModes ()[0]);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   235
  NS_TEST_ASSERT_MSG_EQ_TOL (error, 0.539, 0.001, "Got PER outside of tolerance");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   236
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   237
#ifdef UAN_PROP_BH_INSTALLED
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   238
  //  Correct DB lookup for BH prop.
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   239
  Ptr<UanPropModelBh> propBh = CreateObject<UanPropModelBh> ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   240
  BellhopResp resp = propBh->GetResp (10000, 50, 50, 1000);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   241
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   242
  NS_TEST_ASSERT_MSG_EQ_TOL (resp.GetPathLossDb (), -44.1753, 0.001, "Got BH Pathloss outside of tolerance");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   243
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   244
  NS_TEST_ASSERT_MSG_EQ_TOL (resp.GetPdp ().GetTap (4).GetAmp (), 0.14159, 0.001, "Got BH arrival outside of tolerance");
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   245
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   246
#endif // UAN_PROP_BH_INSTALLED
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   247
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   248
  return DoPhyTests ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   249
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   250
}
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   251
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   252
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   253
class UanTestSuite : public TestSuite
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   254
{
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   255
public:
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   256
  UanTestSuite ();
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   257
};
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   258
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   259
UanTestSuite::UanTestSuite ()
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   260
  :  TestSuite ("devices-uan", UNIT)
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   261
{
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   262
  AddTestCase (new UanTest);
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   263
}
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   264
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   265
UanTestSuite g_uanTestSuite;
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   266
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   267
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   268
66d4eab148ce Added UAN package
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
   269