xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
test
protocol
SeqProxy_test.cpp
1
#include <xrpl/beast/unit_test/suite.h>
2
#include <xrpl/protocol/SeqProxy.h>
3
4
#include <
cstdint
>
5
#include <
limits
>
6
#include <
sstream
>
7
#include <
string
>
8
9
namespace
xrpl
{
10
11
struct
SeqProxy_test
:
public
beast::unit_test::Suite
12
{
13
// Exercise value(), isSeq(), and isTicket().
14
static
constexpr
bool
15
expectValues
(
SeqProxy
seqProx,
std::uint32_t
value,
SeqProxy::Type
type)
16
{
17
bool
const
expectSeq{type ==
SeqProxy::Type::Seq
};
18
return
(seqProx.
value
() == value) && (seqProx.
isSeq
() == expectSeq) &&
19
(seqProx.
isTicket
() == !expectSeq);
20
}
21
22
// Exercise all SeqProxy comparison operators expecting lhs < rhs.
23
static
constexpr
bool
24
expectLt
(
SeqProxy
lhs,
SeqProxy
rhs)
25
{
26
return
(lhs < rhs) && (lhs <= rhs) && (!(lhs == rhs)) && (lhs != rhs) && (!(lhs >= rhs)) &&
27
(!(lhs > rhs));
28
}
29
30
// Exercise all SeqProxy comparison operators expecting lhs == rhs.
31
static
constexpr
bool
32
expectEq
(
SeqProxy
lhs,
SeqProxy
rhs)
33
{
34
return
(!(lhs < rhs)) && (lhs <= rhs) && (lhs == rhs) && (!(lhs != rhs)) && (lhs >= rhs) &&
35
(!(lhs > rhs));
36
}
37
38
// Exercise all SeqProxy comparison operators expecting lhs > rhs.
39
static
constexpr
bool
40
expectGt
(
SeqProxy
lhs,
SeqProxy
rhs)
41
{
42
return
(!(lhs < rhs)) && (!(lhs <= rhs)) && (!(lhs == rhs)) && (lhs != rhs) &&
43
(lhs >= rhs) && (lhs > rhs);
44
}
45
46
// Verify streaming.
47
static
bool
48
streamTest
(
SeqProxy
seqProx)
49
{
50
std::string
const
type{seqProx.
isSeq
() ?
"sequence"
:
"ticket"
};
51
std::string
const
value{
std::to_string
(seqProx.
value
())};
52
53
std::stringstream
ss;
54
ss << seqProx;
55
std::string
str{ss.
str
()};
56
57
return
str.
starts_with
(type) && str[type.
size
()] ==
' '
&&
58
str.
find
(value) == (type.
size
() + 1);
59
}
60
61
void
62
run
()
override
63
{
64
// While SeqProxy supports values of zero, they are not
65
// expected in the wild. Nevertheless they are tested here.
66
// But so are values of 1, which are expected to occur in the wild.
67
static
constexpr
std::uint32_t
kUintMax{
std::numeric_limits<std::uint32_t>::max
()};
68
static
constexpr
SeqProxy::Type
kSeq{
SeqProxy::Type::Seq
};
69
static
constexpr
SeqProxy::Type
kTicket{
SeqProxy::Type::Ticket
};
70
71
static
constexpr
SeqProxy
kSeqZero{kSeq, 0};
72
static
constexpr
SeqProxy
kSeqSmall{kSeq, 1};
73
static
constexpr
SeqProxy
kSeqMiD0{kSeq, 2};
74
static
constexpr
SeqProxy
kSeqMiD1{kSeqMiD0};
75
static
constexpr
SeqProxy
kSeqBig{kSeq, kUintMax};
76
77
static
constexpr
SeqProxy
kTicZero{kTicket, 0};
78
static
constexpr
SeqProxy
kTicSmall{kTicket, 1};
79
static
constexpr
SeqProxy
kTicMid0{kTicket, 2};
80
static
constexpr
SeqProxy
kTicMid1{kTicMid0};
81
static
constexpr
SeqProxy
kTicBig{kTicket, kUintMax};
82
83
// Verify operation of value(), isSeq() and isTicket().
84
static_assert
(
expectValues
(kSeqZero, 0, kSeq));
85
static_assert
(
expectValues
(kSeqSmall, 1, kSeq));
86
static_assert
(
expectValues
(kSeqMiD0, 2, kSeq));
87
static_assert
(
expectValues
(kSeqMiD1, 2, kSeq));
88
static_assert
(
expectValues
(kSeqBig, kUintMax, kSeq));
89
90
static_assert
(
expectValues
(kTicZero, 0, kTicket));
91
static_assert
(
expectValues
(kTicSmall, 1, kTicket));
92
static_assert
(
expectValues
(kTicMid0, 2, kTicket));
93
static_assert
(
expectValues
(kTicMid1, 2, kTicket));
94
static_assert
(
expectValues
(kTicBig, kUintMax, kTicket));
95
96
// Verify expected behavior of comparison operators.
97
static_assert
(
expectEq
(kSeqZero, kSeqZero));
98
static_assert
(
expectLt
(kSeqZero, kSeqSmall));
99
static_assert
(
expectLt
(kSeqZero, kSeqMiD0));
100
static_assert
(
expectLt
(kSeqZero, kSeqMiD1));
101
static_assert
(
expectLt
(kSeqZero, kSeqBig));
102
static_assert
(
expectLt
(kSeqZero, kTicZero));
103
static_assert
(
expectLt
(kSeqZero, kTicSmall));
104
static_assert
(
expectLt
(kSeqZero, kTicMid0));
105
static_assert
(
expectLt
(kSeqZero, kTicMid1));
106
static_assert
(
expectLt
(kSeqZero, kTicBig));
107
108
static_assert
(
expectGt
(kSeqSmall, kSeqZero));
109
static_assert
(
expectEq
(kSeqSmall, kSeqSmall));
110
static_assert
(
expectLt
(kSeqSmall, kSeqMiD0));
111
static_assert
(
expectLt
(kSeqSmall, kSeqMiD1));
112
static_assert
(
expectLt
(kSeqSmall, kSeqBig));
113
static_assert
(
expectLt
(kSeqSmall, kTicZero));
114
static_assert
(
expectLt
(kSeqSmall, kTicSmall));
115
static_assert
(
expectLt
(kSeqSmall, kTicMid0));
116
static_assert
(
expectLt
(kSeqSmall, kTicMid1));
117
static_assert
(
expectLt
(kSeqSmall, kTicBig));
118
119
static_assert
(
expectGt
(kSeqMiD0, kSeqZero));
120
static_assert
(
expectGt
(kSeqMiD0, kSeqSmall));
121
static_assert
(
expectEq
(kSeqMiD0, kSeqMiD0));
122
static_assert
(
expectEq
(kSeqMiD0, kSeqMiD1));
123
static_assert
(
expectLt
(kSeqMiD0, kSeqBig));
124
static_assert
(
expectLt
(kSeqMiD0, kTicZero));
125
static_assert
(
expectLt
(kSeqMiD0, kTicSmall));
126
static_assert
(
expectLt
(kSeqMiD0, kTicMid0));
127
static_assert
(
expectLt
(kSeqMiD0, kTicMid1));
128
static_assert
(
expectLt
(kSeqMiD0, kTicBig));
129
130
static_assert
(
expectGt
(kSeqMiD1, kSeqZero));
131
static_assert
(
expectGt
(kSeqMiD1, kSeqSmall));
132
static_assert
(
expectEq
(kSeqMiD1, kSeqMiD0));
133
static_assert
(
expectEq
(kSeqMiD1, kSeqMiD1));
134
static_assert
(
expectLt
(kSeqMiD1, kSeqBig));
135
static_assert
(
expectLt
(kSeqMiD1, kTicZero));
136
static_assert
(
expectLt
(kSeqMiD1, kTicSmall));
137
static_assert
(
expectLt
(kSeqMiD1, kTicMid0));
138
static_assert
(
expectLt
(kSeqMiD1, kTicMid1));
139
static_assert
(
expectLt
(kSeqMiD1, kTicBig));
140
141
static_assert
(
expectGt
(kSeqBig, kSeqZero));
142
static_assert
(
expectGt
(kSeqBig, kSeqSmall));
143
static_assert
(
expectGt
(kSeqBig, kSeqMiD0));
144
static_assert
(
expectGt
(kSeqBig, kSeqMiD1));
145
static_assert
(
expectEq
(kSeqBig, kSeqBig));
146
static_assert
(
expectLt
(kSeqBig, kTicZero));
147
static_assert
(
expectLt
(kSeqBig, kTicSmall));
148
static_assert
(
expectLt
(kSeqBig, kTicMid0));
149
static_assert
(
expectLt
(kSeqBig, kTicMid1));
150
static_assert
(
expectLt
(kSeqBig, kTicBig));
151
152
static_assert
(
expectGt
(kTicZero, kSeqZero));
153
static_assert
(
expectGt
(kTicZero, kSeqSmall));
154
static_assert
(
expectGt
(kTicZero, kSeqMiD0));
155
static_assert
(
expectGt
(kTicZero, kSeqMiD1));
156
static_assert
(
expectGt
(kTicZero, kSeqBig));
157
static_assert
(
expectEq
(kTicZero, kTicZero));
158
static_assert
(
expectLt
(kTicZero, kTicSmall));
159
static_assert
(
expectLt
(kTicZero, kTicMid0));
160
static_assert
(
expectLt
(kTicZero, kTicMid1));
161
static_assert
(
expectLt
(kTicZero, kTicBig));
162
163
static_assert
(
expectGt
(kTicSmall, kSeqZero));
164
static_assert
(
expectGt
(kTicSmall, kSeqSmall));
165
static_assert
(
expectGt
(kTicSmall, kSeqMiD0));
166
static_assert
(
expectGt
(kTicSmall, kSeqMiD1));
167
static_assert
(
expectGt
(kTicSmall, kSeqBig));
168
static_assert
(
expectGt
(kTicSmall, kTicZero));
169
static_assert
(
expectEq
(kTicSmall, kTicSmall));
170
static_assert
(
expectLt
(kTicSmall, kTicMid0));
171
static_assert
(
expectLt
(kTicSmall, kTicMid1));
172
static_assert
(
expectLt
(kTicSmall, kTicBig));
173
174
static_assert
(
expectGt
(kTicMid0, kSeqZero));
175
static_assert
(
expectGt
(kTicMid0, kSeqSmall));
176
static_assert
(
expectGt
(kTicMid0, kSeqMiD0));
177
static_assert
(
expectGt
(kTicMid0, kSeqMiD1));
178
static_assert
(
expectGt
(kTicMid0, kSeqBig));
179
static_assert
(
expectGt
(kTicMid0, kTicZero));
180
static_assert
(
expectGt
(kTicMid0, kTicSmall));
181
static_assert
(
expectEq
(kTicMid0, kTicMid0));
182
static_assert
(
expectEq
(kTicMid0, kTicMid1));
183
static_assert
(
expectLt
(kTicMid0, kTicBig));
184
185
static_assert
(
expectGt
(kTicMid1, kSeqZero));
186
static_assert
(
expectGt
(kTicMid1, kSeqSmall));
187
static_assert
(
expectGt
(kTicMid1, kSeqMiD0));
188
static_assert
(
expectGt
(kTicMid1, kSeqMiD1));
189
static_assert
(
expectGt
(kTicMid1, kSeqBig));
190
static_assert
(
expectGt
(kTicMid1, kTicZero));
191
static_assert
(
expectGt
(kTicMid1, kTicSmall));
192
static_assert
(
expectEq
(kTicMid1, kTicMid0));
193
static_assert
(
expectEq
(kTicMid1, kTicMid1));
194
static_assert
(
expectLt
(kTicMid1, kTicBig));
195
196
static_assert
(
expectGt
(kTicBig, kSeqZero));
197
static_assert
(
expectGt
(kTicBig, kSeqSmall));
198
static_assert
(
expectGt
(kTicBig, kSeqMiD0));
199
static_assert
(
expectGt
(kTicBig, kSeqMiD1));
200
static_assert
(
expectGt
(kTicBig, kSeqBig));
201
static_assert
(
expectGt
(kTicBig, kTicZero));
202
static_assert
(
expectGt
(kTicBig, kTicSmall));
203
static_assert
(
expectGt
(kTicBig, kTicMid0));
204
static_assert
(
expectGt
(kTicBig, kTicMid1));
205
static_assert
(
expectEq
(kTicBig, kTicBig));
206
207
// Verify streaming.
208
BEAST_EXPECT(
streamTest
(kSeqZero));
209
BEAST_EXPECT(
streamTest
(kSeqSmall));
210
BEAST_EXPECT(
streamTest
(kSeqMiD0));
211
BEAST_EXPECT(
streamTest
(kSeqMiD1));
212
BEAST_EXPECT(
streamTest
(kSeqBig));
213
BEAST_EXPECT(
streamTest
(kTicZero));
214
BEAST_EXPECT(
streamTest
(kTicSmall));
215
BEAST_EXPECT(
streamTest
(kTicMid0));
216
BEAST_EXPECT(
streamTest
(kTicMid1));
217
BEAST_EXPECT(
streamTest
(kTicBig));
218
}
219
};
220
221
BEAST_DEFINE_TESTSUITE
(
SeqProxy
,
protocol
,
xrpl
);
222
223
}
// namespace xrpl
std::string
std::stringstream
beast::unit_test::Suite
A testsuite class.
Definition
suite.h:52
xrpl::SeqProxy
A type that represents either a sequence value or a ticket value.
Definition
SeqProxy.h:37
xrpl::SeqProxy::Type
Type
Definition
SeqProxy.h:39
xrpl::SeqProxy::Type::Seq
@ Seq
Definition
SeqProxy.h:39
xrpl::SeqProxy::Type::Ticket
@ Ticket
Definition
SeqProxy.h:39
xrpl::SeqProxy::isTicket
constexpr bool isTicket() const
Definition
SeqProxy.h:92
xrpl::SeqProxy::value
constexpr std::uint32_t value() const
Definition
SeqProxy.h:80
xrpl::SeqProxy::isSeq
constexpr bool isSeq() const
Definition
SeqProxy.h:86
cstdint
std::string::find
T find(T... args)
std::uint32_t
limits
std::numeric_limits::max
T max(T... args)
protocol
Definition
LedgerNodeHelpers.h:9
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::BEAST_DEFINE_TESTSUITE
BEAST_DEFINE_TESTSUITE(AccountTxPaging, app, xrpl)
std::string::size
T size(T... args)
sstream
std::string::starts_with
T starts_with(T... args)
std::stringstream::str
T str(T... args)
string
xrpl::SeqProxy_test
Definition
SeqProxy_test.cpp:12
xrpl::SeqProxy_test::run
void run() override
Runs the suite.
Definition
SeqProxy_test.cpp:62
xrpl::SeqProxy_test::expectGt
static constexpr bool expectGt(SeqProxy lhs, SeqProxy rhs)
Definition
SeqProxy_test.cpp:40
xrpl::SeqProxy_test::expectLt
static constexpr bool expectLt(SeqProxy lhs, SeqProxy rhs)
Definition
SeqProxy_test.cpp:24
xrpl::SeqProxy_test::expectValues
static constexpr bool expectValues(SeqProxy seqProx, std::uint32_t value, SeqProxy::Type type)
Definition
SeqProxy_test.cpp:15
xrpl::SeqProxy_test::expectEq
static constexpr bool expectEq(SeqProxy lhs, SeqProxy rhs)
Definition
SeqProxy_test.cpp:32
xrpl::SeqProxy_test::streamTest
static bool streamTest(SeqProxy seqProx)
Definition
SeqProxy_test.cpp:48
std::to_string
T to_string(T... args)
Generated by
1.17.0