xrpld
Loading...
Searching...
No Matches
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
9namespace xrpl {
10
12{
13 // Exercise value(), isSeq(), and isTicket().
14 static constexpr bool
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
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
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
41 {
42 return (!(lhs < rhs)) && (!(lhs <= rhs)) && (!(lhs == rhs)) && (lhs != rhs) &&
43 (lhs >= rhs) && (lhs > rhs);
44 }
45
46 // Verify streaming.
47 static bool
49 {
50 std::string const type{seqProx.isSeq() ? "sequence" : "ticket"};
51 std::string const value{std::to_string(seqProx.value())};
52
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
222
223} // namespace xrpl
A testsuite class.
Definition suite.h:50
A type that represents either a sequence value or a ticket value.
Definition SeqProxy.h:36
constexpr bool isTicket() const
Definition SeqProxy.h:74
constexpr std::uint32_t value() const
Definition SeqProxy.h:62
constexpr bool isSeq() const
Definition SeqProxy.h:68
T find(T... args)
T max(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
BEAST_DEFINE_TESTSUITE(AccountTxPaging, app, xrpl)
T size(T... args)
T starts_with(T... args)
T str(T... args)
void run() override
Runs the suite.
static constexpr bool expectGt(SeqProxy lhs, SeqProxy rhs)
static constexpr bool expectLt(SeqProxy lhs, SeqProxy rhs)
static constexpr bool expectValues(SeqProxy seqProx, std::uint32_t value, SeqProxy::Type type)
static constexpr bool expectEq(SeqProxy lhs, SeqProxy rhs)
static bool streamTest(SeqProxy seqProx)
T to_string(T... args)