A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
spectrum-value-test.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2009 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/object.h>
22
#include <ns3/spectrum-value.h>
23
#include <ns3/spectrum-converter.h>
24
#include <ns3/log.h>
25
#include <ns3/test.h>
26
#include <iostream>
27
#include <cmath>
28
29
#include "
spectrum-test.h
"
30
31
using namespace
ns3
;
32
33
// NS_LOG_COMPONENT_DEFINE ("SpectrumValueTest");
34
35
#define TOLERANCE 1e-6
36
37
class
SpectrumValueTestCase
:
public
TestCase
38
{
39
public
:
40
SpectrumValueTestCase
(
SpectrumValue
a,
SpectrumValue
b, std::string name);
41
virtual
~
SpectrumValueTestCase
();
42
virtual
void
DoRun (
void
);
43
44
private
:
45
bool
MoreOrLessEqual (
SpectrumValue
x
,
SpectrumValue
y);
46
SpectrumValue
m_a
;
47
SpectrumValue
m_b
;
48
};
49
50
51
52
SpectrumValueTestCase::SpectrumValueTestCase
(
SpectrumValue
a,
SpectrumValue
b, std::string name)
53
:
TestCase
(name),
54
m_a (a),
55
m_b (b)
56
{
57
}
58
59
SpectrumValueTestCase::~SpectrumValueTestCase
()
60
{
61
}
62
63
64
bool
65
SpectrumValueTestCase::MoreOrLessEqual
(
SpectrumValue
x
,
SpectrumValue
y)
66
{
67
SpectrumValue
z =
x
- y;
68
return
(
Norm
(z) <
TOLERANCE
);
69
}
70
71
void
72
SpectrumValueTestCase::DoRun
(
void
)
73
{
74
NS_TEST_ASSERT_MSG_SPECTRUM_MODEL_EQ_TOL
(*
m_a
.
GetSpectrumModel
(), *
m_b
.
GetSpectrumModel
(),
TOLERANCE
,
""
);
75
NS_TEST_ASSERT_MSG_SPECTRUM_VALUE_EQ_TOL
(
m_a
,
m_b
,
TOLERANCE
,
""
);
76
}
77
78
79
80
81
82
83
84
85
class
SpectrumValueTestSuite
:
public
TestSuite
86
{
87
public
:
88
SpectrumValueTestSuite
();
89
};
90
91
SpectrumValueTestSuite::SpectrumValueTestSuite
()
92
:
TestSuite
(
"spectrum-value"
, UNIT)
93
{
94
95
// NS_LOG_INFO("creating SpectrumValueTestSuite");
96
97
98
std::vector<double> freqs;
99
100
for
(
int
i = 1; i <= 5; i++)
101
{
102
freqs.push_back (i);
103
}
104
105
Ptr<SpectrumModel>
f
= Create<SpectrumModel> (freqs);
106
107
SpectrumValue
v1 (
f
), v2 (
f
), v3 (
f
), v4 (
f
), v5 (
f
), v6 (
f
), v7 (
f
), v8 (
f
), v9 (
f
), v10 (
f
);
108
109
double
doubleValue;
110
111
112
doubleValue = 1.12345600000000;
113
114
v1[0] = 0.700539792840;
115
v1[1] = -0.554277600423;
116
v1[2] = 0.750309319469;
117
v1[3] = -0.892299213192;
118
v1[4] = 0.987045234885;
119
120
v2[0] = 0.870441628737;
121
v2[1] = 0.271419263880;
122
v2[2] = 0.451557288312;
123
v2[3] = 0.968992859395;
124
v2[4] = -0.929186654705;
125
126
v3[0] = 1.570981421577;
127
v3[1] = -0.282858336543;
128
v3[2] = 1.201866607781;
129
v3[3] = 0.076693646203;
130
v3[4] = 0.057858580180;
131
132
v4[0] = -0.169901835897;
133
v4[1] = -0.825696864302;
134
v4[2] = 0.298752031158;
135
v4[3] = -1.861292072588;
136
v4[4] = 1.916231889590;
137
138
v5[0] = 0.609778998275;
139
v5[1] = -0.150441618292;
140
v5[2] = 0.338807641695;
141
v5[3] = -0.864631566028;
142
v5[4] = -0.917149259846;
143
144
v6[0] = 0.804809615846;
145
v6[1] = -2.042145397125;
146
v6[2] = 1.661603829438;
147
v6[3] = -0.920852207053;
148
v6[4] = -1.062267984465;
149
150
v7[0] = 1.823995792840;
151
v7[1] = 0.569178399577;
152
v7[2] = 1.873765319469;
153
v7[3] = 0.231156786808;
154
v7[4] = 2.110501234885;
155
156
v8[0] = -0.422916207160;
157
v8[1] = -1.677733600423;
158
v8[2] = -0.373146680531;
159
v8[3] = -2.015755213192;
160
v8[4] = -0.136410765115;
161
162
v9[0] = 0.787025633505;
163
v9[1] = -0.622706495860;
164
v9[2] = 0.842939506814;
165
v9[3] = -1.002458904856;
166
v9[4] = 1.108901891403;
167
168
v10[0] = 0.623557836569;
169
v10[1] = -0.493368320987;
170
v10[2] = 0.667858215604;
171
v10[3] = -0.794244913190;
172
v10[4] = 0.878579343459;
173
174
SpectrumValue
tv3 (
f
), tv4 (
f
), tv5 (
f
), tv6 (
f
);
175
176
tv3 = v1 + v2;
177
tv4 = v1 - v2;
178
tv5 = v1 * v2;
179
tv6 = v1 / v2;
180
181
182
AddTestCase
(
new
SpectrumValueTestCase
(tv3, v3,
"tv3 = v1 + v2"
), TestCase::QUICK);
183
AddTestCase
(
new
SpectrumValueTestCase
(tv4, v4,
"tv4 = v1 - v2"
), TestCase::QUICK);
184
AddTestCase
(
new
SpectrumValueTestCase
(tv5, v5,
"tv5 = v1 * v2"
), TestCase::QUICK);
185
AddTestCase
(
new
SpectrumValueTestCase
(tv6, v6,
"tv6 = v1 div v2"
), TestCase::QUICK);
186
187
// std::cerr << v6 << std::endl;
188
// std::cerr << tv6 << std::endl;
189
190
191
tv3 = v1;
192
tv4 = v1;
193
tv5 = v1;
194
tv6 = v1;
195
196
tv3 += v2;
197
tv4 -= v2;
198
tv5 *= v2;
199
tv6 /= v2;
200
201
AddTestCase
(
new
SpectrumValueTestCase
(tv3, v3,
"tv3 += v2"
), TestCase::QUICK);
202
AddTestCase
(
new
SpectrumValueTestCase
(tv4, v4,
"tv4 -= v2"
), TestCase::QUICK);
203
AddTestCase
(
new
SpectrumValueTestCase
(tv5, v5,
"tv5 *= v2"
), TestCase::QUICK);
204
AddTestCase
(
new
SpectrumValueTestCase
(tv6, v6,
"tv6 div= v2"
), TestCase::QUICK);
205
206
SpectrumValue
tv7a (
f
), tv8a (
f
), tv9a (
f
), tv10a (
f
);
207
tv7a = v1 + doubleValue;
208
tv8a = v1 - doubleValue;
209
tv9a = v1 * doubleValue;
210
tv10a = v1 / doubleValue;
211
AddTestCase
(
new
SpectrumValueTestCase
(tv7a, v7,
"tv7a = v1 + doubleValue"
), TestCase::QUICK);
212
AddTestCase
(
new
SpectrumValueTestCase
(tv8a, v8,
"tv8a = v1 - doubleValue"
), TestCase::QUICK);
213
AddTestCase
(
new
SpectrumValueTestCase
(tv9a, v9,
"tv9a = v1 * doubleValue"
), TestCase::QUICK);
214
AddTestCase
(
new
SpectrumValueTestCase
(tv10a, v10,
"tv10a = v1 div doubleValue"
), TestCase::QUICK);
215
216
SpectrumValue
tv7b (
f
), tv8b (
f
), tv9b (
f
), tv10b (
f
);
217
tv7b = doubleValue + v1;
218
tv8b = doubleValue - v1;
219
tv9b = doubleValue * v1;
220
tv10b = doubleValue / v1;
221
AddTestCase
(
new
SpectrumValueTestCase
(tv7b, v7,
"tv7b = doubleValue + v1"
), TestCase::QUICK);
222
AddTestCase
(
new
SpectrumValueTestCase
(tv8b, v8,
"tv8b = doubleValue - v1"
), TestCase::QUICK);
223
AddTestCase
(
new
SpectrumValueTestCase
(tv9b, v9,
"tv9b = doubleValue * v1"
), TestCase::QUICK);
224
AddTestCase
(
new
SpectrumValueTestCase
(tv10b, v10,
"tv10b = doubleValue div v1"
), TestCase::QUICK);
225
226
227
228
229
230
SpectrumValue
v1ls3 (
f
), v1rs3 (
f
);
231
SpectrumValue
tv1ls3 (
f
), tv1rs3 (
f
);
232
233
v1ls3[0] = v1[3];
234
v1ls3[1] = v1[4];
235
tv1ls3 = v1 << 3;
236
AddTestCase
(
new
SpectrumValueTestCase
(tv1ls3, v1ls3,
"tv1ls3 = v1 << 3"
), TestCase::QUICK);
237
238
239
v1rs3[3] = v1[0];
240
v1rs3[4] = v1[1];
241
tv1rs3 = v1 >> 3;
242
AddTestCase
(
new
SpectrumValueTestCase
(tv1rs3, v1rs3,
"tv1rs3 = v1 >> 3"
), TestCase::QUICK);
243
244
245
}
246
247
248
249
250
251
252
253
class
SpectrumConverterTestSuite
:
public
TestSuite
254
{
255
public
:
256
SpectrumConverterTestSuite
();
257
};
258
259
SpectrumConverterTestSuite::SpectrumConverterTestSuite
()
260
:
TestSuite
(
"spectrum-converter"
, UNIT)
261
{
262
double
f
;
263
264
265
std::vector<double> f1;
266
for
(
f
= 3;
f
<= 7;
f
+= 2)
267
{
268
f1.push_back (
f
);
269
}
270
Ptr<SpectrumModel>
sof1 = Create<SpectrumModel> (f1);
271
272
273
274
std::vector<double> f2;
275
for
(
f
= 2;
f
<= 8;
f
+= 1)
276
{
277
f2.push_back (
f
);
278
}
279
Ptr<SpectrumModel>
sof2 = Create<SpectrumModel> (f2);
280
281
282
283
Ptr<SpectrumValue>
res;
284
285
286
Ptr<SpectrumValue>
v1 = Create<SpectrumValue> (sof1);
287
*v1 = 4;
288
SpectrumConverter
c12 (sof1, sof2);
289
res = c12.
Convert
(v1);
290
SpectrumValue
t12 (sof2);
291
t12 = 4;
292
t12[0] = 2;
293
t12[6] = 2;
294
// NS_LOG_LOGIC(*v1);
295
// NS_LOG_LOGIC(t12);
296
// NS_LOG_LOGIC(*res);
297
298
AddTestCase
(
new
SpectrumValueTestCase
(t12, *res,
""
), TestCase::QUICK);
299
// TEST_ASSERT(MoreOrLessEqual(t12, *res));
300
301
Ptr<SpectrumValue>
v2a = Create<SpectrumValue> (sof2);
302
*v2a = -2;
303
SpectrumConverter
c21 (sof2, sof1);
304
res = c21.
Convert
(v2a);
305
SpectrumValue
t21a (sof1);
306
t21a = -2;
307
// NS_LOG_LOGIC(*v2a);
308
// NS_LOG_LOGIC(t21a);
309
// NS_LOG_LOGIC(*res);
310
AddTestCase
(
new
SpectrumValueTestCase
(t21a, *res,
""
), TestCase::QUICK);
311
// TEST_ASSERT(MoreOrLessEqual(t21a, *res));
312
313
Ptr<SpectrumValue>
v2b = Create<SpectrumValue> (sof2);
314
(*v2b)[0] = 3;
315
(*v2b)[1] = 5;
316
(*v2b)[2] = 1;
317
(*v2b)[3] = 2;
318
(*v2b)[4] = 4;
319
(*v2b)[5] = 6;
320
(*v2b)[6] = 3;
321
res = c21.
Convert
(v2b);
322
SpectrumValue
t21b (sof1);
323
t21b[0] = 3 * 0.25 + 5 * 0.5 + 1 * 0.25;
324
t21b[1] = 1 * 0.25 + 2 * 0.5 + 4 * 0.25;
325
t21b[2] = 4 * 0.25 + 6 * 0.5 + 3 * 0.25;
326
// NS_LOG_LOGIC(*v2b);
327
// NS_LOG_LOGIC(t21b);
328
// NS_LOG_LOGIC(*res);
329
AddTestCase
(
new
SpectrumValueTestCase
(t21b, *res,
""
), TestCase::QUICK);
330
331
332
}
333
334
335
336
337
338
339
// static instance of test suites
340
static
SpectrumValueTestSuite
g_SpectrumValueTestSuite
;
341
static
SpectrumConverterTestSuite
g_SpectrumConverterTestSuite
;
SpectrumValueTestCase::DoRun
virtual void DoRun(void)
Implementation to actually run this TestCase.
Definition:
spectrum-value-test.cc:72
SpectrumConverterTestSuite
Definition:
spectrum-value-test.cc:254
ns3::TestCase::AddTestCase
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition:
test.cc:299
NS_TEST_ASSERT_MSG_SPECTRUM_MODEL_EQ_TOL
#define NS_TEST_ASSERT_MSG_SPECTRUM_MODEL_EQ_TOL(actual, expected, tol, msg)
Test if two SpectrumModel instances are equal within a given tolerance.
Definition:
spectrum-test.h:40
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
SpectrumValueTestCase
Definition:
spectrum-value-test.cc:38
SpectrumValueTestCase::m_a
SpectrumValue m_a
Definition:
spectrum-value-test.cc:46
TOLERANCE
#define TOLERANCE
Definition:
spectrum-value-test.cc:35
ns3::SpectrumValue::GetSpectrumModel
Ptr< const SpectrumModel > GetSpectrumModel() const
Definition:
spectrum-value.cc:62
ns3::TestCase
encapsulates test code
Definition:
test.h:1154
ns3::Ptr< SpectrumModel >
SpectrumValueTestSuite
Definition:
spectrum-value-test.cc:86
spectrum-test.h
g_SpectrumValueTestSuite
static SpectrumValueTestSuite g_SpectrumValueTestSuite
Definition:
spectrum-value-test.cc:340
SpectrumValueTestCase::SpectrumValueTestCase
SpectrumValueTestCase(SpectrumValue a, SpectrumValue b, std::string name)
Definition:
spectrum-value-test.cc:52
SpectrumValueTestCase::~SpectrumValueTestCase
virtual ~SpectrumValueTestCase()
Definition:
spectrum-value-test.cc:59
ns3::SpectrumValue
Set of values corresponding to a given SpectrumModel.
Definition:
spectrum-value.h:59
g_SpectrumConverterTestSuite
static SpectrumConverterTestSuite g_SpectrumConverterTestSuite
Definition:
spectrum-value-test.cc:341
ns3::SpectrumConverter::Convert
Ptr< SpectrumValue > Convert(Ptr< const SpectrumValue > vvf) const
Convert a particular ValueVsFreq instance to.
Definition:
spectrum-converter.cc:79
SpectrumConverterTestSuite::SpectrumConverterTestSuite
SpectrumConverterTestSuite()
Definition:
spectrum-value-test.cc:259
ns3::Norm
double Norm(const SpectrumValue &x)
Definition:
spectrum-value.cc:348
ns3::TestSuite
A suite of tests to run.
Definition:
test.h:1344
SpectrumValueTestCase::m_b
SpectrumValue m_b
Definition:
spectrum-value-test.cc:47
ns3::SpectrumConverter
Class which implements a converter between SpectrumValue which are defined over different SpectrumMod...
Definition:
spectrum-converter.h:43
f
double f(double x, void *params)
Definition:
80211b.c:70
sample-rng-plot.x
list x
Definition:
sample-rng-plot.py:34
SpectrumValueTestSuite::SpectrumValueTestSuite
SpectrumValueTestSuite()
Definition:
spectrum-value-test.cc:91
NS_TEST_ASSERT_MSG_SPECTRUM_VALUE_EQ_TOL
#define NS_TEST_ASSERT_MSG_SPECTRUM_VALUE_EQ_TOL(actual, expected, tol, msg)
Test if two SpectrumValue instances are equal within a given tolerance.
Definition:
spectrum-test.h:101
SpectrumValueTestCase::MoreOrLessEqual
bool MoreOrLessEqual(SpectrumValue x, SpectrumValue y)
Definition:
spectrum-value-test.cc:65
src
spectrum
test
spectrum-value-test.cc
Generated on Fri Oct 1 2021 17:03:36 for ns-3 by
1.8.20