This commit is contained in:
Pavel Boyko
2010-03-11 13:37:22 +03:00

View File

@@ -367,42 +367,59 @@ LogDistancePropagationLossModelTestCase::DoRun (void)
return GetErrorStatus ();
}
struct MatrixPropagationLossModelTestCase : public TestCase
class MatrixPropagationLossModelTestCase : public TestCase
{
MatrixPropagationLossModelTestCase () : TestCase ("Test MatrixPropagationLossModel") {}
bool DoRun ()
{
Ptr<Node> n[3];
Ptr<MobilityModel> m[3];
for (int i = 0; i < 3; ++i)
{
n[i] = CreateObject<Node> ();
m[i] = CreateObject<ConstantPositionMobilityModel> ();
n[i]->AggregateObject (m[i]);
}
MatrixPropagationLossModel loss;
// no loss by default
loss.SetDefaultLoss (0);
// -10 dB for 0 -> 1 and 1 -> 0
loss.SetLoss (n[0], n[1], 10);
// -30 dB from 0 to 2 and -100 dB from 2 to 0
loss.SetLoss (n[0], n[2], 30, /*symmetric = */false);
loss.SetLoss (n[2], n[0], 100, /*symmetric = */false);
// default from 1 to 2
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[0], m[1]), -10, "Loss 0 -> 1 incorrect");
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[1], m[0]), -10, "Loss 1 -> 0 incorrect");
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[0], m[2]), -30, "Loss 0 -> 2 incorrect");
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[2], m[0]), -100, "Loss 2 -> 0 incorrect");
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[1], m[2]), 0, "Loss 1 -> 2 incorrect");
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[2], m[1]), 0, "Loss 2 -> 1 incorrect");
return GetErrorStatus ();
}
public:
MatrixPropagationLossModelTestCase ();
virtual ~MatrixPropagationLossModelTestCase ();
private:
virtual bool DoRun (void);
};
MatrixPropagationLossModelTestCase::MatrixPropagationLossModelTestCase ()
: TestCase ("Test MatrixPropagationLossModel")
{
}
MatrixPropagationLossModelTestCase::~MatrixPropagationLossModelTestCase ()
{
}
bool
MatrixPropagationLossModelTestCase::DoRun (void)
{
Ptr<Node> n[3];
Ptr<MobilityModel> m[3];
for (int i = 0; i < 3; ++i)
{
n[i] = CreateObject<Node> ();
m[i] = CreateObject<ConstantPositionMobilityModel> ();
n[i]->AggregateObject (m[i]);
}
MatrixPropagationLossModel loss;
// no loss by default
loss.SetDefaultLoss (0);
// -10 dB for 0 -> 1 and 1 -> 0
loss.SetLoss (n[0], n[1], 10);
// -30 dB from 0 to 2 and -100 dB from 2 to 0
loss.SetLoss (n[0], n[2], 30, /*symmetric = */false);
loss.SetLoss (n[2], n[0], 100, /*symmetric = */false);
// default from 1 to 2
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[0], m[1]), -10, "Loss 0 -> 1 incorrect");
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[1], m[0]), -10, "Loss 1 -> 0 incorrect");
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[0], m[2]), -30, "Loss 0 -> 2 incorrect");
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[2], m[0]), -100, "Loss 2 -> 0 incorrect");
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[1], m[2]), 0, "Loss 1 -> 2 incorrect");
NS_TEST_ASSERT_MSG_EQ (loss.CalcRxPower (0, m[2], m[1]), 0, "Loss 2 -> 1 incorrect");
Simulator::Destroy ();
return GetErrorStatus ();
}
class PropagationLossModelsTestSuite : public TestSuite
{
public: