A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
test-angles.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2011 CTTC
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 2 as
7
* published by the Free Software Foundation;
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*
18
* Author: Nicola Baldo <nbaldo@cttc.es>
19
*/
20
21
#include <ns3/log.h>
22
#include <ns3/test.h>
23
#include <ns3/antenna-model.h>
24
#include <cmath>
25
#include <string>
26
#include <iostream>
27
#include <sstream>
28
29
using namespace
ns3
;
30
31
class
OneVectorConstructorTestCase
:
public
TestCase
32
{
33
public
:
34
static
std::string BuildNameString (Vector v);
35
OneVectorConstructorTestCase
(Vector v,
Angles
a);
36
37
private
:
38
virtual
void
DoRun (
void
);
39
40
Vector
m_v
;
41
Angles
m_a
;
42
};
43
44
std::string
OneVectorConstructorTestCase::BuildNameString
(Vector v)
45
{
46
std::ostringstream oss;
47
oss <<
" v = "
<< v;
48
return
oss.str ();
49
}
50
51
52
OneVectorConstructorTestCase::OneVectorConstructorTestCase
(Vector v,
Angles
a)
53
:
TestCase
(BuildNameString (v)),
54
m_v (v),
55
m_a (a)
56
{}
57
58
void
59
OneVectorConstructorTestCase::DoRun
()
60
{
61
Angles
a (
m_v
);
62
NS_TEST_EXPECT_MSG_EQ_TOL
( a.
GetAzimuth
(),
m_a
.
GetAzimuth
(), 1e-10,
"incorrect phi"
);
63
NS_TEST_EXPECT_MSG_EQ_TOL
( a.
GetInclination
(),
m_a
.
GetInclination
(), 1e-10,
"incorrect theta"
);
64
}
65
66
67
68
69
70
class
TwoVectorsConstructorTestCase
:
public
TestCase
71
{
72
public
:
73
static
std::string
BuildNameString
(Vector v, Vector o);
74
TwoVectorsConstructorTestCase
(Vector v, Vector o,
Angles
a);
75
76
private
:
77
virtual
void
DoRun
(
void
);
78
79
Vector
m_v
;
80
Vector
m_o
;
81
Angles
m_a
;
82
};
83
84
std::string
TwoVectorsConstructorTestCase::BuildNameString
(
Vector
v,
Vector
o)
85
{
86
std::ostringstream oss;
87
oss <<
" v = "
<< v <<
", o = "
<< o;
88
return
oss.str ();
89
}
90
91
92
TwoVectorsConstructorTestCase::TwoVectorsConstructorTestCase
(
Vector
v,
Vector
o,
Angles
a)
93
:
TestCase
(BuildNameString (v, o)),
94
m_v (v),
95
m_o (o),
96
m_a (a)
97
{}
98
99
void
100
TwoVectorsConstructorTestCase::DoRun
()
101
{
102
Angles
a (
m_v
,
m_o
);
103
NS_TEST_EXPECT_MSG_EQ_TOL
( a.
GetAzimuth
(),
m_a
.
GetAzimuth
(), 1e-10,
"incorrect phi"
);
104
NS_TEST_EXPECT_MSG_EQ_TOL
( a.
GetInclination
(),
m_a
.
GetInclination
(), 1e-10,
"incorrect theta"
);
105
}
106
107
108
109
110
111
112
class
AnglesTestSuite
:
public
TestSuite
113
{
114
public
:
115
AnglesTestSuite
();
116
};
117
118
AnglesTestSuite::AnglesTestSuite
()
119
:
TestSuite
(
"angles"
, UNIT)
120
{
121
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (1, 0, 0),
Angles
(0, M_PI_2)), TestCase::QUICK);
122
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (-1, 0, 0),
Angles
(M_PI, M_PI_2)), TestCase::QUICK);
123
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, 1, 0),
Angles
(M_PI_2, M_PI_2)), TestCase::QUICK);
124
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, -1, 0),
Angles
(-M_PI_2, M_PI_2)), TestCase::QUICK);
125
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, 0, 1),
Angles
(0, 0)), TestCase::QUICK);
126
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, 0, -1),
Angles
(0, M_PI)), TestCase::QUICK);
127
128
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (2, 0, 0),
Angles
(0, M_PI_2)), TestCase::QUICK);
129
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (-2, 0, 0),
Angles
(M_PI, M_PI_2)), TestCase::QUICK);
130
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, 2, 0),
Angles
(M_PI_2, M_PI_2)), TestCase::QUICK);
131
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, -2, 0),
Angles
(-M_PI_2, M_PI_2)), TestCase::QUICK);
132
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, 0, 2),
Angles
(0, 0)), TestCase::QUICK);
133
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, 0, -2),
Angles
(0, M_PI)), TestCase::QUICK);
134
135
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (1, 0, 1),
Angles
(0, M_PI_4)), TestCase::QUICK);
136
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (1, 0, -1),
Angles
(0, 3 * M_PI_4)), TestCase::QUICK);
137
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (1, 1, 0),
Angles
(M_PI_4, M_PI_2)), TestCase::QUICK);
138
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (1, -1, 0),
Angles
(-M_PI_4, M_PI_2)), TestCase::QUICK);
139
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (-1, 0, 1),
Angles
(M_PI, M_PI_4)), TestCase::QUICK);
140
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (-1, 0, -1),
Angles
(M_PI, 3 * M_PI_4)), TestCase::QUICK);
141
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (-1, 1, 0),
Angles
(3 * M_PI_4, M_PI_2)), TestCase::QUICK);
142
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (-1, -1, 0),
Angles
(-3 * M_PI_4, M_PI_2)), TestCase::QUICK);
143
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, 1, 1),
Angles
(M_PI_2, M_PI_4)), TestCase::QUICK);
144
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, 1, -1),
Angles
(M_PI_2, 3 * M_PI_4)), TestCase::QUICK);
145
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, -1, 1),
Angles
(-M_PI_2, M_PI_4)), TestCase::QUICK);
146
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (0, -1, -1),
Angles
(-M_PI_2, 3 * M_PI_4)), TestCase::QUICK);
147
148
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (1, 1, std::sqrt (2)),
Angles
(M_PI_4, M_PI_4)), TestCase::QUICK);
149
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (1, 1, -std::sqrt (2)),
Angles
(M_PI_4, 3 * M_PI_4)), TestCase::QUICK);
150
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (1, -1, std::sqrt (2)),
Angles
(-M_PI_4, M_PI_4)), TestCase::QUICK);
151
AddTestCase
(
new
OneVectorConstructorTestCase
(Vector (-1, 1, std::sqrt (2)),
Angles
(3 * M_PI_4, M_PI_4)), TestCase::QUICK);
152
153
154
155
156
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (1, 0, 0), Vector (0, 0, 0),
Angles
(0, M_PI_2)), TestCase::QUICK);
157
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (-1, 0, 0), Vector (0, 0, 0),
Angles
(M_PI, M_PI_2)), TestCase::QUICK);
158
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, 1, 0), Vector (0, 0, 0),
Angles
(M_PI_2, M_PI_2)), TestCase::QUICK);
159
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, -1, 0), Vector (0, 0, 0),
Angles
(-M_PI_2, M_PI_2)), TestCase::QUICK);
160
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, 0, 1), Vector (0, 0, 0),
Angles
(0, 0)), TestCase::QUICK);
161
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, 0, -1), Vector (0, 0, 0),
Angles
(0, M_PI)), TestCase::QUICK);
162
163
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (2, 0, 0), Vector (0, 0, 0),
Angles
(0, M_PI_2)), TestCase::QUICK);
164
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (-2, 0, 0), Vector (0, 0, 0),
Angles
(M_PI, M_PI_2)), TestCase::QUICK);
165
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, 2, 0), Vector (0, 0, 0),
Angles
(M_PI_2, M_PI_2)), TestCase::QUICK);
166
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, -2, 0), Vector (0, 0, 0),
Angles
(-M_PI_2, M_PI_2)), TestCase::QUICK);
167
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, 0, 2), Vector (0, 0, 0),
Angles
(0, 0)), TestCase::QUICK);
168
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, 0, -2), Vector (0, 0, 0),
Angles
(0, M_PI)), TestCase::QUICK);
169
170
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (1, 0, 1), Vector (0, 0, 0),
Angles
(0, M_PI_4)), TestCase::QUICK);
171
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (1, 0, -1), Vector (0, 0, 0),
Angles
(0, 3 * M_PI_4)), TestCase::QUICK);
172
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (1, 1, 0), Vector (0, 0, 0),
Angles
(M_PI_4, M_PI_2)), TestCase::QUICK);
173
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (1, -1, 0), Vector (0, 0, 0),
Angles
(-M_PI_4, M_PI_2)), TestCase::QUICK);
174
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (-1, 0, 1), Vector (0, 0, 0),
Angles
(M_PI, M_PI_4)), TestCase::QUICK);
175
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (-1, 0, -1), Vector (0, 0, 0),
Angles
(M_PI, 3 * M_PI_4)), TestCase::QUICK);
176
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (-1, 1, 0), Vector (0, 0, 0),
Angles
(3 * M_PI_4, M_PI_2)), TestCase::QUICK);
177
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (-1, -1, 0), Vector (0, 0, 0),
Angles
(-3 * M_PI_4, M_PI_2)), TestCase::QUICK);
178
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, 1, 1), Vector (0, 0, 0),
Angles
(M_PI_2, M_PI_4)), TestCase::QUICK);
179
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, 1, -1), Vector (0, 0, 0),
Angles
(M_PI_2, 3 * M_PI_4)), TestCase::QUICK);
180
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, -1, 1), Vector (0, 0, 0),
Angles
(-M_PI_2, M_PI_4)), TestCase::QUICK);
181
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, -1, -1), Vector (0, 0, 0),
Angles
(-M_PI_2, 3 * M_PI_4)), TestCase::QUICK);
182
183
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (1, 1, std::sqrt (2)), Vector (0, 0, 0),
Angles
(M_PI_4, M_PI_4)), TestCase::QUICK);
184
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (1, 1, -std::sqrt (2)), Vector (0, 0, 0),
Angles
(M_PI_4, 3 * M_PI_4)), TestCase::QUICK);
185
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (1, -1, std::sqrt (2)), Vector (0, 0, 0),
Angles
(-M_PI_4, M_PI_4)), TestCase::QUICK);
186
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (-1, 1, std::sqrt (2)), Vector (0, 0, 0),
Angles
(3 * M_PI_4, M_PI_4)), TestCase::QUICK);
187
188
189
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (3, 2, 2), Vector (2, 2, 2),
Angles
(0, M_PI_2)), TestCase::QUICK);
190
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (1, 2, 2), Vector (2, 2, 2),
Angles
(M_PI, M_PI_2)), TestCase::QUICK);
191
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (2, 3, 2), Vector (2, 2, 2),
Angles
(M_PI_2, M_PI_2)), TestCase::QUICK);
192
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (-1, 2, 2), Vector (-1, 3, 2),
Angles
(-M_PI_2, M_PI_2)), TestCase::QUICK);
193
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (4, -2, 7), Vector (4, -2, 6),
Angles
(0, 0)), TestCase::QUICK);
194
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, -5, -1), Vector (0, -5, 0),
Angles
(0, M_PI)), TestCase::QUICK);
195
196
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (-2, 2, -1), Vector (-4, 2, -1),
Angles
(0, M_PI_2)), TestCase::QUICK);
197
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (2, 2, 0), Vector (4, 2, 0),
Angles
(M_PI, M_PI_2)), TestCase::QUICK);
198
199
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (-1, 4, 4), Vector (-2, 4, 3),
Angles
(0, M_PI_4)), TestCase::QUICK);
200
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0, -2, -6), Vector (-1, -2, -5),
Angles
(0, 3 * M_PI_4)), TestCase::QUICK);
201
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (77, 3, 43), Vector (78, 2, 43),
Angles
(3 * M_PI_4, M_PI_2)), TestCase::QUICK);
202
203
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (24, -2, -6 - std::sqrt (2)), Vector (23, -3, -6),
Angles
(M_PI_4, 3 * M_PI_4)), TestCase::QUICK);
204
AddTestCase
(
new
TwoVectorsConstructorTestCase
(Vector (0.5, 11.45, std::sqrt (2) - 1), Vector (-0.5, 12.45, -1),
Angles
(-M_PI_4, M_PI_4)), TestCase::QUICK);
205
206
207
}
208
209
static
AnglesTestSuite
staticAnglesTestSuiteInstance
;
OneVectorConstructorTestCase::DoRun
virtual void DoRun(void)
Implementation to actually run this TestCase.
Definition:
test-angles.cc:59
TwoVectorsConstructorTestCase::DoRun
virtual void DoRun(void)
Implementation to actually run this TestCase.
Definition:
test-angles.cc:100
ns3::TestCase::AddTestCase
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition:
test.cc:299
TwoVectorsConstructorTestCase::m_v
Vector m_v
Definition:
test-angles.cc:79
AnglesTestSuite::AnglesTestSuite
AnglesTestSuite()
Definition:
test-angles.cc:118
ns3::Angles::GetInclination
double GetInclination(void) const
Getter for inclination angle.
Definition:
angles.cc:229
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::TestCase
encapsulates test code
Definition:
test.h:1154
OneVectorConstructorTestCase
Definition:
test-angles.cc:32
TwoVectorsConstructorTestCase::TwoVectorsConstructorTestCase
TwoVectorsConstructorTestCase(Vector v, Vector o, Angles a)
Definition:
test-angles.cc:92
NS_TEST_EXPECT_MSG_EQ_TOL
#define NS_TEST_EXPECT_MSG_EQ_TOL(actual, limit, tol, msg)
Test that actual and expected (limit) values are equal to plus or minus some tolerance and report if ...
Definition:
test.h:563
OneVectorConstructorTestCase::m_a
Angles m_a
Definition:
test-angles.cc:41
TwoVectorsConstructorTestCase::BuildNameString
static std::string BuildNameString(Vector v, Vector o)
Definition:
test-angles.cc:84
OneVectorConstructorTestCase::m_v
Vector m_v
Definition:
test-angles.cc:40
TwoVectorsConstructorTestCase
Definition:
test-angles.cc:71
TwoVectorsConstructorTestCase::m_o
Vector m_o
Definition:
test-angles.cc:80
ns3::TestSuite
A suite of tests to run.
Definition:
test.h:1344
OneVectorConstructorTestCase::BuildNameString
static std::string BuildNameString(Vector v)
Definition:
test-angles.cc:44
ns3::Angles
Class holding the azimuth and inclination angles of spherical coordinates.
Definition:
angles.h:119
staticAnglesTestSuiteInstance
static AnglesTestSuite staticAnglesTestSuiteInstance
Definition:
test-angles.cc:209
ns3::Angles::GetAzimuth
double GetAzimuth(void) const
Getter for azimuth angle.
Definition:
angles.cc:222
OneVectorConstructorTestCase::OneVectorConstructorTestCase
OneVectorConstructorTestCase(Vector v, Angles a)
Definition:
test-angles.cc:52
ns3::Vector3D::Vector
Vector3D Vector
Vector alias typedef for compatibility with mobility models.
Definition:
vector.h:324
AnglesTestSuite
Definition:
test-angles.cc:113
TwoVectorsConstructorTestCase::m_a
Angles m_a
Definition:
test-angles.cc:81
src
antenna
test
test-angles.cc
Generated on Fri Oct 1 2021 17:02:53 for ns-3 by
1.8.20