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
TypeId
GetInstanceTypeId
()
const override
58
{
59
return
GetTypeId();
60
}
61
62
/// Increment the sequence number.
63
void
IncSequenceNumber
()
64
{
65
m_testTracedSequenceNumber += 1;
66
}
67
};
68
69
}
// namespace
70
71
/**
72
* @ingroup network-test
73
* @ingroup tests
74
*
75
* @brief Sequence Number Unit Test
76
*/
77
class
SequenceNumberTestCase
:
public
TestCase
78
{
79
SequenceNumber32
m_oldval
;
//!< Old value
80
SequenceNumber32
m_newval
;
//!< New value
81
82
/**
83
* Sequence number tracker
84
* @param oldval Old value
85
* @param newval New value
86
*/
87
void
SequenceNumberTracer
(
SequenceNumber32
oldval
,
SequenceNumber32
newval
);
88
89
public
:
90
SequenceNumberTestCase
();
91
~SequenceNumberTestCase
()
override
;
92
void
DoRun
()
override
;
93
};
94
95
SequenceNumberTestCase::SequenceNumberTestCase
()
96
:
TestCase
(
"Sequence number test case"
)
97
{
98
m_oldval
= 0;
99
m_newval
= 0;
100
}
101
102
SequenceNumberTestCase::~SequenceNumberTestCase
()
103
{
104
}
105
106
void
107
SequenceNumberTestCase::SequenceNumberTracer
(
SequenceNumber32
oldval
,
SequenceNumber32
newval
)
108
{
109
m_oldval
=
oldval
;
110
m_newval
=
newval
;
111
}
112
113
void
114
SequenceNumberTestCase::DoRun
()
115
{
116
#define SEQ_TEST_ASSERT_EQUAL(a, b) NS_TEST_ASSERT_MSG_EQ(a, b, "foo")
117
#define SEQ_TEST_ASSERT(a) NS_TEST_ASSERT_MSG_EQ(bool(a), true, "foo")
118
119
{
120
SequenceNumber32
num1
(3);
121
SequenceNumber32
num2
(5);
122
uint32_t
value
;
123
124
value
= (
num1
+
num2
).GetValue();
125
SEQ_TEST_ASSERT_EQUAL
(
value
, 8);
126
127
num1
+=
num2
.GetValue();
128
SEQ_TEST_ASSERT_EQUAL
(
num1
,
SequenceNumber32
(8));
129
130
++
num1
;
131
SEQ_TEST_ASSERT_EQUAL
(
num1
,
SequenceNumber32
(9));
132
133
--
num1
;
134
SEQ_TEST_ASSERT_EQUAL
(
num1
,
SequenceNumber32
(8));
135
136
num1
++;
137
SEQ_TEST_ASSERT_EQUAL
(
num1
,
SequenceNumber32
(9));
138
139
num1
--;
140
SEQ_TEST_ASSERT_EQUAL
(
num1
,
SequenceNumber32
(8));
141
}
142
143
{
144
SequenceNumber16
num1
(60900);
145
SequenceNumber16
num2
(5);
146
SequenceNumber16
num3
(10000);
147
148
SEQ_TEST_ASSERT
(
num1
==
num1
);
149
150
SEQ_TEST_ASSERT
(
num2
!=
num1
);
151
152
SEQ_TEST_ASSERT
(
num3
>
num2
);
153
SEQ_TEST_ASSERT
(
num3
>=
num2
);
154
SEQ_TEST_ASSERT
(
num1
<
num3
);
155
SEQ_TEST_ASSERT
(
num1
<=
num3
);
156
157
SEQ_TEST_ASSERT
(
num1
<
num2
);
158
SEQ_TEST_ASSERT
(
num1
<=
num2
);
159
SEQ_TEST_ASSERT
(
num2
>
num1
);
160
SEQ_TEST_ASSERT
(
num2
>=
num1
);
161
162
SEQ_TEST_ASSERT
(
num1
+
num2
>
num1
);
163
SEQ_TEST_ASSERT
(
num1
+
num2
>=
num1
);
164
SEQ_TEST_ASSERT
(
num1
<
num1
+
num2
);
165
SEQ_TEST_ASSERT
(
num1
<=
num1
+
num2
);
166
167
SEQ_TEST_ASSERT
(
num1
<
num1
+
num3
);
168
SEQ_TEST_ASSERT
(
num1
<=
num1
+
num3
);
169
SEQ_TEST_ASSERT
(
num1
+
num3
>
num1
);
170
SEQ_TEST_ASSERT
(
num1
+
num3
>=
num1
);
171
}
172
173
{
174
SEQ_TEST_ASSERT_EQUAL
((
SequenceNumber16
(1000) +
SequenceNumber16
(6000)) -
175
SequenceNumber16
(1000),
176
6000);
177
SEQ_TEST_ASSERT_EQUAL
((
SequenceNumber16
(60000) +
SequenceNumber16
(6000)) -
178
SequenceNumber16
(60000),
179
6000);
180
SEQ_TEST_ASSERT_EQUAL
(
SequenceNumber16
(1000) -
SequenceNumber16
(6000), -5000);
181
SEQ_TEST_ASSERT_EQUAL
((
SequenceNumber16
(60000) +
SequenceNumber16
(1000)) -
182
SequenceNumber16
(65000),
183
-4000);
184
}
185
186
{
187
SequenceNumber32
num1
(3);
188
189
SEQ_TEST_ASSERT_EQUAL
(
num1
+ 10,
SequenceNumber32
(13));
190
num1
+= -1;
191
SEQ_TEST_ASSERT_EQUAL
(
num1
,
SequenceNumber32
(2));
192
193
SEQ_TEST_ASSERT_EQUAL
(
num1
- (
num1
- 100), 100);
194
}
195
196
{
197
Ptr<SequenceNumberTestObj>
obj
=
CreateObject<SequenceNumberTestObj>
();
198
obj
->TraceConnectWithoutContext(
199
"TestTracedSequenceNumber"
,
200
MakeCallback
(&
SequenceNumberTestCase::SequenceNumberTracer
,
this
));
201
obj
->IncSequenceNumber();
202
SEQ_TEST_ASSERT_EQUAL
(
m_oldval
,
SequenceNumber32
(0));
203
SEQ_TEST_ASSERT_EQUAL
(
m_newval
,
SequenceNumber32
(1));
204
obj
->Dispose();
205
}
206
}
207
208
/**
209
* @ingroup network-test
210
* @ingroup tests
211
*
212
* @brief Sequence Number TestSuite
213
*/
214
class
SequenceNumberTestSuite
:
public
TestSuite
215
{
216
public
:
217
SequenceNumberTestSuite
()
218
:
TestSuite
(
"sequence-number"
,
Type
::
UNIT
)
219
{
220
AddTestCase
(
new
SequenceNumberTestCase
(), TestCase::Duration::QUICK);
221
}
222
};
223
224
static
SequenceNumberTestSuite
g_seqNumTests
;
//!< Static variable for test initialization
SequenceNumberTestCase
Sequence Number Unit Test.
Definition
sequence-number-test-suite.cc:78
SequenceNumberTestCase::~SequenceNumberTestCase
~SequenceNumberTestCase() override
Definition
sequence-number-test-suite.cc:102
SequenceNumberTestCase::DoRun
void DoRun() override
Implementation to actually run this TestCase.
Definition
sequence-number-test-suite.cc:114
SequenceNumberTestCase::SequenceNumberTestCase
SequenceNumberTestCase()
Definition
sequence-number-test-suite.cc:95
SequenceNumberTestCase::m_oldval
SequenceNumber32 m_oldval
Old value.
Definition
sequence-number-test-suite.cc:79
SequenceNumberTestCase::SequenceNumberTracer
void SequenceNumberTracer(SequenceNumber32 oldval, SequenceNumber32 newval)
Sequence number tracker.
Definition
sequence-number-test-suite.cc:107
SequenceNumberTestCase::m_newval
SequenceNumber32 m_newval
New value.
Definition
sequence-number-test-suite.cc:80
SequenceNumberTestSuite
Sequence Number TestSuite.
Definition
sequence-number-test-suite.cc:215
SequenceNumberTestSuite::SequenceNumberTestSuite
SequenceNumberTestSuite()
Definition
sequence-number-test-suite.cc:217
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:63
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::GetInstanceTypeId
TypeId GetInstanceTypeId() const override
Get the most derived TypeId for this Object.
Definition
sequence-number-test-suite.cc:57
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
ptr.h:66
ns3::SequenceNumber< uint32_t, int32_t >
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::Create
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition
ptr.h:436
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:198
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
ns3::value
static unsigned int value(char c)
Definition
qkd-encryptor.cc:267
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:224
SEQ_TEST_ASSERT
#define SEQ_TEST_ASSERT(a)
src
network
test
sequence-number-test-suite.cc
Generated on Mon Dec 15 2025 15:22:01 for ns-3 by
1.9.8