added separate test suites for new propagation models

This commit is contained in:
Nicola Baldo
2012-05-04 15:15:41 +02:00
parent 473176f5e4
commit 062d46609c
5 changed files with 516 additions and 0 deletions

View File

@@ -0,0 +1,124 @@
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Marco Miozzo <marco.miozzo@cttc.es>
* Nicola Baldo <nbaldo@cttc.es>
*/
#include <ns3/log.h>
#include <ns3/test.h>
#include <ns3/itu-r-1411-los-propagation-loss-model.h>
#include <ns3/string.h>
#include <ns3/double.h>
#include <ns3/constant-position-mobility-model.h>
#include <ns3/enum.h>
namespace ns3 {
NS_LOG_COMPONENT_DEFINE ("ItuR1411LosPropagationLossModelTest");
class ItuR1411LosPropagationLossModelTestCase : public TestCase
{
public:
ItuR1411LosPropagationLossModelTestCase (double freq, double dist, double hb, double hm, double refValue, std::string name);
virtual ~ItuR1411LosPropagationLossModelTestCase ();
private:
virtual void DoRun (void);
Ptr<MobilityModel> CreateMobilityModel (uint16_t index);
double m_freq;
double m_dist;
double m_hb;
double m_hm;
double m_lossRef;
};
ItuR1411LosPropagationLossModelTestCase::ItuR1411LosPropagationLossModelTestCase (double freq, double dist, double hb, double hm, double refValue, std::string name)
: TestCase (name),
m_freq (freq),
m_dist (dist),
m_hb (hb),
m_hm (hm),
m_lossRef (refValue)
{
}
ItuR1411LosPropagationLossModelTestCase::~ItuR1411LosPropagationLossModelTestCase ()
{
}
void
ItuR1411LosPropagationLossModelTestCase::DoRun (void)
{
NS_LOG_FUNCTION (this);
Ptr<MobilityModel> mma = CreateObject<ConstantPositionMobilityModel> ();
mma->SetPosition (Vector (0.0, 0.0, m_hb));
Ptr<MobilityModel> mmb = CreateObject<ConstantPositionMobilityModel> ();
mmb->SetPosition (Vector (m_dist, 0.0, m_hm));
Ptr<ItuR1411LosPropagationLossModel> propagationLossModel = CreateObject<ItuR1411LosPropagationLossModel> ();
propagationLossModel->SetAttribute ("Frequency", DoubleValue (m_freq));
double loss = propagationLossModel->GetLoss (mma, mmb);
NS_LOG_INFO ("Calculated loss: " << loss);
NS_LOG_INFO ("Theoretical loss: " << m_lossRef);
NS_TEST_ASSERT_MSG_EQ_TOL (loss, m_lossRef, 0.1, "Wrong loss!");
}
class ItuR1411LosPropagationLossModelTestSuite : public TestSuite
{
public:
ItuR1411LosPropagationLossModelTestSuite ();
};
ItuR1411LosPropagationLossModelTestSuite::ItuR1411LosPropagationLossModelTestSuite ()
: TestSuite ("itu-r-1411-los", SYSTEM)
{
LogComponentEnable ("ItuR1411LosPropagationLossModelTest", LOG_LEVEL_ALL);
double freq = 2.1140e9;
AddTestCase (new ItuR1411LosPropagationLossModelTestCase (freq, 100, 30, 1, 81.00, "freq=2114MHz, dist=100m"));
}
static ItuR1411LosPropagationLossModelTestSuite g_ituR1411LosTestSuite;
} // namespace ns3

View File

@@ -0,0 +1,127 @@
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Marco Miozzo <marco.miozzo@cttc.es>
* Nicola Baldo <nbaldo@cttc.es>
*/
#include <ns3/log.h>
#include <ns3/test.h>
#include <ns3/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h>
#include <ns3/string.h>
#include <ns3/double.h>
#include <ns3/constant-position-mobility-model.h>
#include <ns3/enum.h>
namespace ns3 {
NS_LOG_COMPONENT_DEFINE ("ItuR1411NlosOverRooftopPropagationLossModelTest");
class ItuR1411NlosOverRooftopPropagationLossModelTestCase : public TestCase
{
public:
ItuR1411NlosOverRooftopPropagationLossModelTestCase (double freq, double dist, double hb, double hm, EnvironmentType env, CitySize city, double refValue, std::string name);
virtual ~ItuR1411NlosOverRooftopPropagationLossModelTestCase ();
private:
virtual void DoRun (void);
Ptr<MobilityModel> CreateMobilityModel (uint16_t index);
double m_freq;
double m_dist;
double m_hb;
double m_hm;
EnvironmentType m_env;
CitySize m_city;
double m_lossRef;
};
ItuR1411NlosOverRooftopPropagationLossModelTestCase::ItuR1411NlosOverRooftopPropagationLossModelTestCase (double freq, double dist, double hb, double hm, EnvironmentType env, CitySize city, double refValue, std::string name)
: TestCase (name),
m_freq (freq),
m_dist (dist),
m_hb (hb),
m_hm (hm),
m_env (env),
m_city (city),
m_lossRef (refValue)
{
}
ItuR1411NlosOverRooftopPropagationLossModelTestCase::~ItuR1411NlosOverRooftopPropagationLossModelTestCase ()
{
}
void
ItuR1411NlosOverRooftopPropagationLossModelTestCase::DoRun (void)
{
NS_LOG_FUNCTION (this);
Ptr<MobilityModel> mma = CreateObject<ConstantPositionMobilityModel> ();
mma->SetPosition (Vector (0.0, 0.0, m_hb));
Ptr<MobilityModel> mmb = CreateObject<ConstantPositionMobilityModel> ();
mmb->SetPosition (Vector (m_dist, 0.0, m_hm));
Ptr<ItuR1411NlosOverRooftopPropagationLossModel> propagationLossModel = CreateObject<ItuR1411NlosOverRooftopPropagationLossModel> ();
propagationLossModel->SetAttribute ("Frequency", DoubleValue (m_freq));
propagationLossModel->SetAttribute ("Environment", EnumValue (m_env));
propagationLossModel->SetAttribute ("CitySize", EnumValue (m_city));
double loss = propagationLossModel->GetLoss (mma, mmb);
NS_LOG_INFO ("Calculated loss: " << loss);
NS_LOG_INFO ("Theoretical loss: " << m_lossRef);
NS_TEST_ASSERT_MSG_EQ_TOL (loss, m_lossRef, 0.1, "Wrong loss!");
}
class ItuR1411NlosOverRooftopPropagationLossModelTestSuite : public TestSuite
{
public:
ItuR1411NlosOverRooftopPropagationLossModelTestSuite ();
};
ItuR1411NlosOverRooftopPropagationLossModelTestSuite::ItuR1411NlosOverRooftopPropagationLossModelTestSuite ()
: TestSuite ("itu-r-1411-nlos-over-rooftop", SYSTEM)
{
LogComponentEnable ("ItuR1411NlosOverRooftopPropagationLossModelTest", LOG_LEVEL_ALL);
AddTestCase (new ItuR1411NlosOverRooftopPropagationLossModelTestCase (2.1140e9, 900, 30, 1, UrbanEnvironment, LargeCity, 143.69, "f=2114Mhz, dist=900, urban large city"));
}
static ItuR1411NlosOverRooftopPropagationLossModelTestSuite g_ituR1411NlosOverRooftopTestSuite;
} // namespace ns3

View File

@@ -0,0 +1,119 @@
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Marco Miozzo <marco.miozzo@cttc.es>
* Nicola Baldo <nbaldo@cttc.es>
*/
#include <ns3/log.h>
#include <ns3/test.h>
#include <ns3/kun-2600-mhz-propagation-loss-model.h>
#include <ns3/string.h>
#include <ns3/double.h>
#include <ns3/constant-position-mobility-model.h>
#include <ns3/enum.h>
namespace ns3 {
NS_LOG_COMPONENT_DEFINE ("Kun2600MhzPropagationLossModelTest");
class Kun2600MhzPropagationLossModelTestCase : public TestCase
{
public:
Kun2600MhzPropagationLossModelTestCase (double dist, double hb, double hm, double refValue, std::string name);
virtual ~Kun2600MhzPropagationLossModelTestCase ();
private:
virtual void DoRun (void);
Ptr<MobilityModel> CreateMobilityModel (uint16_t index);
double m_dist;
double m_hb;
double m_hm;
double m_lossRef;
};
Kun2600MhzPropagationLossModelTestCase::Kun2600MhzPropagationLossModelTestCase (double dist, double hb, double hm, double refValue, std::string name)
: TestCase (name),
m_dist (dist),
m_hb (hb),
m_hm (hm),
m_lossRef (refValue)
{
}
Kun2600MhzPropagationLossModelTestCase::~Kun2600MhzPropagationLossModelTestCase ()
{
}
void
Kun2600MhzPropagationLossModelTestCase::DoRun (void)
{
NS_LOG_FUNCTION (this);
Ptr<MobilityModel> mma = CreateObject<ConstantPositionMobilityModel> ();
mma->SetPosition (Vector (0.0, 0.0, m_hb));
Ptr<MobilityModel> mmb = CreateObject<ConstantPositionMobilityModel> ();
mmb->SetPosition (Vector (m_dist, 0.0, m_hm));
Ptr<Kun2600MhzPropagationLossModel> propagationLossModel = CreateObject<Kun2600MhzPropagationLossModel> ();
double loss = propagationLossModel->GetLoss (mma, mmb);
NS_LOG_INFO ("Calculated loss: " << loss);
NS_LOG_INFO ("Theoretical loss: " << m_lossRef);
NS_TEST_ASSERT_MSG_EQ_TOL (loss, m_lossRef, 0.1, "Wrong loss!");
}
class Kun2600MhzPropagationLossModelTestSuite : public TestSuite
{
public:
Kun2600MhzPropagationLossModelTestSuite ();
};
Kun2600MhzPropagationLossModelTestSuite::Kun2600MhzPropagationLossModelTestSuite ()
: TestSuite ("kun-2600-mhz", SYSTEM)
{
LogComponentEnable ("Kun2600MhzPropagationLossModelTest", LOG_LEVEL_ALL);
AddTestCase (new Kun2600MhzPropagationLossModelTestCase (2000, 30, 1, 121.83, "dist=2000m"));
}
static Kun2600MhzPropagationLossModelTestSuite g_kun2600MhzTestSuite;
} // namespace ns3

View File

@@ -0,0 +1,142 @@
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Marco Miozzo <marco.miozzo@cttc.es>
* Nicola Baldo <nbaldo@cttc.es>
*/
#include <ns3/log.h>
#include <ns3/test.h>
#include <ns3/okumura-hata-propagation-loss-model.h>
#include <ns3/string.h>
#include <ns3/double.h>
#include <ns3/constant-position-mobility-model.h>
#include <ns3/enum.h>
namespace ns3 {
NS_LOG_COMPONENT_DEFINE ("OkumuraHataPropagationLossModelTest");
class OkumuraHataPropagationLossModelTestCase : public TestCase
{
public:
OkumuraHataPropagationLossModelTestCase (double freq, double dist, double hb, double hm, EnvironmentType env, CitySize city, double refValue, std::string name);
virtual ~OkumuraHataPropagationLossModelTestCase ();
private:
virtual void DoRun (void);
Ptr<MobilityModel> CreateMobilityModel (uint16_t index);
double m_freq;
double m_dist;
double m_hb;
double m_hm;
EnvironmentType m_env;
CitySize m_city;
double m_lossRef;
};
OkumuraHataPropagationLossModelTestCase::OkumuraHataPropagationLossModelTestCase (double freq, double dist, double hb, double hm, EnvironmentType env, CitySize city, double refValue, std::string name)
: TestCase (name),
m_freq (freq),
m_dist (dist),
m_hb (hb),
m_hm (hm),
m_env (env),
m_city (city),
m_lossRef (refValue)
{
}
OkumuraHataPropagationLossModelTestCase::~OkumuraHataPropagationLossModelTestCase ()
{
}
void
OkumuraHataPropagationLossModelTestCase::DoRun (void)
{
NS_LOG_FUNCTION (this);
Ptr<MobilityModel> mma = CreateObject<ConstantPositionMobilityModel> ();
mma->SetPosition (Vector (0.0, 0.0, m_hb));
Ptr<MobilityModel> mmb = CreateObject<ConstantPositionMobilityModel> ();
mmb->SetPosition (Vector (m_dist, 0.0, m_hm));
Ptr<OkumuraHataPropagationLossModel> propagationLossModel = CreateObject<OkumuraHataPropagationLossModel> ();
propagationLossModel->SetAttribute ("Frequency", DoubleValue (m_freq));
propagationLossModel->SetAttribute ("Environment", EnumValue (m_env));
propagationLossModel->SetAttribute ("CitySize", EnumValue (m_city));
double loss = propagationLossModel->GetLoss (mma, mmb);
NS_LOG_INFO ("Calculated loss: " << loss);
NS_LOG_INFO ("Theoretical loss: " << m_lossRef);
NS_TEST_ASSERT_MSG_EQ_TOL (loss, m_lossRef, 0.1, "Wrong loss!");
}
class OkumuraHataPropagationLossModelTestSuite : public TestSuite
{
public:
OkumuraHataPropagationLossModelTestSuite ();
};
OkumuraHataPropagationLossModelTestSuite::OkumuraHataPropagationLossModelTestSuite ()
: TestSuite ("okumura-hata", SYSTEM)
{
LogComponentEnable ("OkumuraHataPropagationLossModelTest", LOG_LEVEL_ALL);
double freq = 869e6; // this will use the original OH model
AddTestCase (new OkumuraHataPropagationLossModelTestCase (freq, 2000, 30, 1, UrbanEnvironment, LargeCity, 137.93, "original OH Urban Large city"));
AddTestCase (new OkumuraHataPropagationLossModelTestCase (freq, 2000, 30, 1, UrbanEnvironment, SmallCity, 137.88, "original OH Urban small city"));
AddTestCase (new OkumuraHataPropagationLossModelTestCase (freq, 2000, 30, 1, SubUrbanEnvironment, LargeCity, 128.03, "original OH SubUrban"));
AddTestCase (new OkumuraHataPropagationLossModelTestCase (freq, 2000, 30, 1, OpenAreasEnvironment, LargeCity, 110.21, "original OH OpenAreas"));
freq = 2.1140e9; // this will use the extended COST231 OH model
AddTestCase (new OkumuraHataPropagationLossModelTestCase (freq, 2000, 30, 1, UrbanEnvironment, LargeCity, 148.55, "COST231 OH Urban Large city"));
AddTestCase (new OkumuraHataPropagationLossModelTestCase (freq, 2000, 30, 1, UrbanEnvironment, SmallCity, 150.64, "COST231 OH Urban small city and suburban"));
}
static OkumuraHataPropagationLossModelTestSuite g_okumuraHataTestSuite;
} // namespace ns3

View File

@@ -17,6 +17,10 @@ def build(bld):
module_test = bld.create_ns3_module_test_library('propagation')
module_test.source = [
'test/propagation-loss-model-test-suite.cc',
'test/okumura-hata-test-suite.cc',
'test/itu-r-1411-los-test-suite.cc',
'test/kun-2600-mhz-test-suite.cc',
'test/itu-r-1411-nlos-over-rooftop-test-suite.cc',
]
headers = bld.new_task_gen(features=['ns3header'])