A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Documentation ▼
Installation
Manual
Models
Contributing
Wiki
Development ▼
API Docs
Issue Tracker
Merge Requests
API
Loading...
Searching...
No Matches
sequence-number-test-suite.cc
Go to the documentation of this file.
1
//
2
// Copyright (c) 2008-2010 INESC Porto
3
//
4
// SPDX-License-Identifier: GPL-2.0-only
5
//
6
// Author: Gustavo J. A. M. Carneiro <gjc@inescporto.pt> <gjcarneiro@gmail.com>
7
//
8
9
#include "ns3/object.h"
10
#include "ns3/sequence-number.h"
11
#include "ns3/test.h"
12
#include "ns3/trace-source-accessor.h"
13
#include "ns3/traced-value.h"
14
15
using namespace
ns3
;
16
17
namespace
18
{
19
20
/**
21
* @ingroup network-test
22
* @ingroup tests
23
*
24
* @brief Test object using sequence numbers
25
*
26
* @note Class internal to sequence-number-test-suite.cc
27
*/
28
class
SequenceNumberTestObj
:
public
Object
29
{
30
/// Test traced sequence number.
31
TracedValue<SequenceNumber32>
m_testTracedSequenceNumber
;
32
33
public
:
34
SequenceNumberTestObj
()
35
{
36
m_testTracedSequenceNumber =
SequenceNumber32
(0);
37
}
38
39
/**
40
* @brief Get the type ID.
41
* @return The object TypeId.
42
*/
43
static
TypeId
GetTypeId
()
44
{
45
static
TypeId
tid =
46
TypeId
(
"ns3::SequenceNumberTestObj"
)
47
.
SetParent
<
Object
>()
48
.AddTraceSource(
49
"TestTracedSequenceNumber"
,
50
"A traceable sequence number"
,
51
MakeTraceSourceAccessor
(&
SequenceNumberTestObj::m_testTracedSequenceNumber
),
52
"ns3::SequenceNumber32TracedValueCallback"
)
53
.AddConstructor<SequenceNumberTestObj>();
54
return
tid;
55
}
56
57
/// Increment the sequence number.
58
void
IncSequenceNumber
()
59
{
60
m_testTracedSequenceNumber += 1;
61
}
62
};
63
64
}
// namespace
65
66
/**
67
* @ingroup network-test
68
* @ingroup tests
69
*
70
* @brief Sequence Number Unit Test
71
*/
72
class
SequenceNumberTestCase
:
public
TestCase
73
{
74
SequenceNumber32
m_oldval
;
//!< Old value
75
SequenceNumber32
m_newval
;
//!< New value
76
77
/**
78
* Sequence number tracker
79
* @param oldval Old value
80
* @param newval New value
81
*/
82
void
SequenceNumberTracer
(
SequenceNumber32
oldval,
SequenceNumber32
newval);
83
84
public
:
85
SequenceNumberTestCase
();
86
~SequenceNumberTestCase
()
override
;
87
void
DoRun
()
override
;
88
};
89
90
SequenceNumberTestCase::SequenceNumberTestCase
()
91
:
TestCase
(
"Sequence number test case"
)
92
{
93
m_oldval
= 0;
94
m_newval
= 0;
95
}
96
97
SequenceNumberTestCase::~SequenceNumberTestCase
()
98
{
99
}
100
101
void
102
SequenceNumberTestCase::SequenceNumberTracer
(
SequenceNumber32
oldval,
SequenceNumber32
newval)
103
{
104
m_oldval
= oldval;
105
m_newval
= newval;
106
}
107
108
void
109
SequenceNumberTestCase::DoRun
()
110
{
111
#define SEQ_TEST_ASSERT_EQUAL(a, b) NS_TEST_ASSERT_MSG_EQ(a, b, "foo")
112
#define SEQ_TEST_ASSERT(a) NS_TEST_ASSERT_MSG_EQ(bool(a), true, "foo")
113
114
{
115
SequenceNumber32
num1(3);
116
SequenceNumber32
num2(5);
117
uint32_t
value;
118
119
value = (num1 + num2).GetValue();
120
SEQ_TEST_ASSERT_EQUAL
(value, 8);
121
122
num1 += num2.
GetValue
();
123
SEQ_TEST_ASSERT_EQUAL
(num1,
SequenceNumber32
(8));
124
125
++num1;
126
SEQ_TEST_ASSERT_EQUAL
(num1,
SequenceNumber32
(9));
127
128
--num1;
129
SEQ_TEST_ASSERT_EQUAL
(num1,
SequenceNumber32
(8));
130
131
num1++;
132
SEQ_TEST_ASSERT_EQUAL
(num1,
SequenceNumber32
(9));
133
134
num1--;
135
SEQ_TEST_ASSERT_EQUAL
(num1,
SequenceNumber32
(8));
136
}
137
138
{
139
SequenceNumber16
num1(60900);
140
SequenceNumber16
num2(5);
141
SequenceNumber16
num3(10000);
142
143
SEQ_TEST_ASSERT
(num1 == num1);
144
145
SEQ_TEST_ASSERT
(num2 != num1);
146
147
SEQ_TEST_ASSERT
(num3 > num2);
148
SEQ_TEST_ASSERT
(num3 >= num2);
149
SEQ_TEST_ASSERT
(num1 < num3);
150
SEQ_TEST_ASSERT
(num1 <= num3);
151
152
SEQ_TEST_ASSERT
(num1 < num2);
153
SEQ_TEST_ASSERT
(num1 <= num2);
154
SEQ_TEST_ASSERT
(num2 > num1);
155
SEQ_TEST_ASSERT
(num2 >= num1);
156
157
SEQ_TEST_ASSERT
(num1 + num2 > num1);
158
SEQ_TEST_ASSERT
(num1 + num2 >= num1);
159
SEQ_TEST_ASSERT
(num1 < num1 + num2);
160
SEQ_TEST_ASSERT
(num1 <= num1 + num2);
161
162
SEQ_TEST_ASSERT
(num1 < num1 + num3);
163
SEQ_TEST_ASSERT
(num1 <= num1 + num3);
164
SEQ_TEST_ASSERT
(num1 + num3 > num1);
165
SEQ_TEST_ASSERT
(num1 + num3 >= num1);
166
}
167
168
{
169
SEQ_TEST_ASSERT_EQUAL
((
SequenceNumber16
(1000) +
SequenceNumber16
(6000)) -
170
SequenceNumber16
(1000),
171
6000);
172
SEQ_TEST_ASSERT_EQUAL
((
SequenceNumber16
(60000) +
SequenceNumber16
(6000)) -
173
SequenceNumber16
(60000),
174
6000);
175
SEQ_TEST_ASSERT_EQUAL
(
SequenceNumber16
(1000) -
SequenceNumber16
(6000), -5000);
176
SEQ_TEST_ASSERT_EQUAL
((
SequenceNumber16
(60000) +
SequenceNumber16
(1000)) -
177
SequenceNumber16
(65000),
178
-4000);
179
}
180
181
{
182
SequenceNumber32
num1(3);
183
184
SEQ_TEST_ASSERT_EQUAL
(num1 + 10,
SequenceNumber32
(13));
185
num1 += -1;
186
SEQ_TEST_ASSERT_EQUAL
(num1,
SequenceNumber32
(2));
187
188
SEQ_TEST_ASSERT_EQUAL
(num1 - (num1 - 100), 100);
189
}
190
191
{
192
Ptr<SequenceNumberTestObj>
obj =
CreateObject<SequenceNumberTestObj>
();
193
obj->TraceConnectWithoutContext(
194
"TestTracedSequenceNumber"
,
195
MakeCallback
(&
SequenceNumberTestCase::SequenceNumberTracer
,
this
));
196
obj->IncSequenceNumber();
197
SEQ_TEST_ASSERT_EQUAL
(
m_oldval
,
SequenceNumber32
(0));
198
SEQ_TEST_ASSERT_EQUAL
(
m_newval
,
SequenceNumber32
(1));
199
obj->Dispose();
200
}
201
}
202
203
/**
204
* @ingroup network-test
205
* @ingroup tests
206
*
207
* @brief Sequence Number TestSuite
208
*/
209
class
SequenceNumberTestSuite
:
public
TestSuite
210
{
211
public
:
212
SequenceNumberTestSuite
()
213
:
TestSuite
(
"sequence-number"
,
Type
::
UNIT
)
214
{
215
AddTestCase
(
new
SequenceNumberTestCase
(), TestCase::Duration::QUICK);
216
}
217
};
218
219
static
SequenceNumberTestSuite
g_seqNumTests
;
//!< Static variable for test initialization
SequenceNumberTestCase
Sequence Number Unit Test.
Definition
sequence-number-test-suite.cc:73
SequenceNumberTestCase::~SequenceNumberTestCase
~SequenceNumberTestCase() override
Definition
sequence-number-test-suite.cc:97
SequenceNumberTestCase::DoRun
void DoRun() override
Implementation to actually run this TestCase.
Definition
sequence-number-test-suite.cc:109
SequenceNumberTestCase::SequenceNumberTestCase
SequenceNumberTestCase()
Definition
sequence-number-test-suite.cc:90
SequenceNumberTestCase::m_oldval
SequenceNumber32 m_oldval
Old value.
Definition
sequence-number-test-suite.cc:74
SequenceNumberTestCase::SequenceNumberTracer
void SequenceNumberTracer(SequenceNumber32 oldval, SequenceNumber32 newval)
Sequence number tracker.
Definition
sequence-number-test-suite.cc:102
SequenceNumberTestCase::m_newval
SequenceNumber32 m_newval
New value.
Definition
sequence-number-test-suite.cc:75
SequenceNumberTestSuite
Sequence Number TestSuite.
Definition
sequence-number-test-suite.cc:210
SequenceNumberTestSuite::SequenceNumberTestSuite
SequenceNumberTestSuite()
Definition
sequence-number-test-suite.cc:212
anonymous_namespace{sequence-number-test-suite.cc}::SequenceNumberTestObj
Test object using sequence numbers.
Definition
sequence-number-test-suite.cc:29
anonymous_namespace{sequence-number-test-suite.cc}::SequenceNumberTestObj::m_testTracedSequenceNumber
TracedValue< SequenceNumber32 > m_testTracedSequenceNumber
Test traced sequence number.
Definition
sequence-number-test-suite.cc:31
anonymous_namespace{sequence-number-test-suite.cc}::SequenceNumberTestObj::IncSequenceNumber
void IncSequenceNumber()
Increment the sequence number.
Definition
sequence-number-test-suite.cc:58
anonymous_namespace{sequence-number-test-suite.cc}::SequenceNumberTestObj::GetTypeId
static TypeId GetTypeId()
Get the type ID.
Definition
sequence-number-test-suite.cc:43
anonymous_namespace{sequence-number-test-suite.cc}::SequenceNumberTestObj::SequenceNumberTestObj
SequenceNumberTestObj()
Definition
sequence-number-test-suite.cc:34
ns3::Object
A base class which provides memory management and object aggregation.
Definition
object.h:78
ns3::Ptr
Smart pointer class similar to boost::intrusive_ptr.
Definition
mpi-test-fixtures.h:37
ns3::SequenceNumber< uint32_t, int32_t >
ns3::SequenceNumber::GetValue
NUMERIC_TYPE GetValue() const
Extracts the numeric value of the sequence number.
Definition
sequence-number.h:111
ns3::TestCase
encapsulates test code
Definition
test.h:1050
ns3::TestCase::AddTestCase
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Definition
test.cc:292
ns3::TestSuite
A suite of tests to run.
Definition
test.h:1267
ns3::TestSuite::Type
Type
Type of test.
Definition
test.h:1274
ns3::TestSuite::UNIT
static constexpr auto UNIT
Definition
test.h:1291
ns3::TracedValue
Trace classes with value semantics.
Definition
traced-value.h:105
ns3::TypeId
a unique identifier for an interface.
Definition
type-id.h:49
ns3::TypeId::SetParent
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition
type-id.cc:1001
uint32_t
ns3::CreateObject
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Definition
object.h:619
ns3::SequenceNumber32
SequenceNumber< uint32_t, int32_t > SequenceNumber32
32 bit Sequence number.
Definition
sequence-number.h:415
ns3::SequenceNumber16
SequenceNumber< uint16_t, int16_t > SequenceNumber16
16 bit Sequence number.
Definition
sequence-number.h:420
ns3::MakeTraceSourceAccessor
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
Definition
trace-source-accessor.h:204
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::MakeCallback
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Definition
callback.h:684
SEQ_TEST_ASSERT_EQUAL
#define SEQ_TEST_ASSERT_EQUAL(a, b)
g_seqNumTests
static SequenceNumberTestSuite g_seqNumTests
Static variable for test initialization.
Definition
sequence-number-test-suite.cc:219
SEQ_TEST_ASSERT
#define SEQ_TEST_ASSERT(a)
src
network
test
sequence-number-test-suite.cc
Generated on Tue Apr 29 2025 11:07:03 for ns-3 by
1.11.0