52 BEAST_EXPECT(shouldBeInvalid ==
sfInvalid);
54 testInvalid(STI_VL, 255);
55 testInvalid(STI_UINT256, 255);
56 testInvalid(STI_UINT32, 255);
57 testInvalid(STI_VECTOR256, 255);
58 testInvalid(STI_OBJECT, 255);
76 SField const& sfTestVL = sfMasterSignature;
77 SField const& sfTestH256 = sfCheckID;
78 SField const& sfTestU32 = sfSettleDelay;
79 SField const& sfTestV256 = sfAmendments;
80 SField const& sfTestObject = sfMajority;
90 STObject object1(elements, sfTestObject);
109 fail(
"STObject error 4");
128 unexpected(copy.isFieldPresent(sfTestH256),
"STObject error 9");
132 copy.setFieldU32(sfTestU32, 1);
136 for (
int i = 0; i < 1000; i++)
146 STObject const object3(elements, it, sfTestObject);
156 for (
int i = 0; i < uints.
capacity(); ++i)
166 STObject const object3(elements, it, sfTestObject);
171 BEAST_EXPECT(uints1 == uints3);
181 auto const& sf1Outer = sfSequence;
182 auto const& sf2Outer = sfExpiration;
183 auto const& sf3Outer = sfQualityIn;
184 auto const& sf4Outer = sfAmount;
185 auto const& sf4 = sfSignature;
186 auto const& sf5 = sfPublicKey;
191 auto const st = [&]() {
198 BEAST_EXPECT(st[sf1Outer] == 1);
199 BEAST_EXPECT(st[sf2Outer] == 2);
201 BEAST_EXPECT(*st[~sf1Outer] == 1);
202 BEAST_EXPECT(*st[~sf2Outer] == 2);
203 BEAST_EXPECT(st[~sf3Outer] == std::nullopt);
204 BEAST_EXPECT(!!st[~sf1Outer]);
205 BEAST_EXPECT(!!st[~sf2Outer]);
206 BEAST_EXPECT(!st[~sf3Outer]);
207 BEAST_EXPECT(st[sf1Outer] != st[sf2Outer]);
208 BEAST_EXPECT(st[~sf1Outer] != st[~sf2Outer]);
222 auto const st = [&]() {
229 BEAST_EXPECT(st[sf1Outer] == 1);
230 BEAST_EXPECT(st[sf2Outer] == 2);
231 BEAST_EXPECT(st[sf3Outer] == 0);
232 BEAST_EXPECT(*st[~sf1Outer] == 1);
233 BEAST_EXPECT(*st[~sf2Outer] == 2);
234 BEAST_EXPECT(*st[~sf3Outer] == 0);
235 BEAST_EXPECT(!!st[~sf1Outer]);
236 BEAST_EXPECT(!!st[~sf2Outer]);
237 BEAST_EXPECT(!!st[~sf3Outer]);
245 except([&]() {
return st[sf1Outer] == 0; });
246 BEAST_EXPECT(st[~sf1Outer] == std::nullopt);
249 BEAST_EXPECT(!st[~sf1Outer]);
251 BEAST_EXPECT(st[sf1Outer] == 2);
252 BEAST_EXPECT(st[~sf1Outer] != std::nullopt);
254 BEAST_EXPECT(!!st[~sf1Outer]);
256 BEAST_EXPECT(st[sf1Outer] == 1);
257 BEAST_EXPECT(!!st[sf1Outer]);
258 BEAST_EXPECT(!!st[~sf1Outer]);
260 BEAST_EXPECT(!st[sf1Outer]);
261 BEAST_EXPECT(!!st[~sf1Outer]);
262 st[~sf1Outer] = std::nullopt;
263 BEAST_EXPECT(!st[~sf1Outer]);
264 BEAST_EXPECT(st[~sf1Outer] == std::nullopt);
266 st[~sf1Outer] = std::nullopt;
267 BEAST_EXPECT(!st[~sf1Outer]);
268 except([&]() {
return st[sf1Outer] == 0; });
269 except([&]() {
return *st[~sf1Outer]; });
271 BEAST_EXPECT(st[sf1Outer] == 1);
272 BEAST_EXPECT(!!st[sf1Outer]);
273 BEAST_EXPECT(!!st[~sf1Outer]);
275 st[sf2Outer] = st[sf1Outer];
276 BEAST_EXPECT(st[sf1Outer] == 3);
277 BEAST_EXPECT(st[sf2Outer] == 3);
278 BEAST_EXPECT(st[sf2Outer] == st[sf1Outer]);
280 st[sf2Outer] = st[sf1Outer];
281 BEAST_EXPECT(st[sf1Outer] == 4);
282 BEAST_EXPECT(st[sf2Outer] == 4);
283 BEAST_EXPECT(st[sf2Outer] == st[sf1Outer]);
285 BEAST_EXPECT(st[sf1Outer] == 5);
287 BEAST_EXPECT(st[sf4Outer] ==
STAmount{1});
289 BEAST_EXPECT(st[sf4Outer] ==
STAmount{2});
291 BEAST_EXPECT(st[sf1Outer] == 4);
293 BEAST_EXPECT(st[sf4Outer] ==
STAmount{1});
300 BEAST_EXPECT(!!st[~sf1Outer]);
301 BEAST_EXPECT(st[~sf1Outer] != std::nullopt);
302 BEAST_EXPECT(st[sf1Outer] == 0);
303 BEAST_EXPECT(*st[~sf1Outer] == 0);
304 BEAST_EXPECT(!st[~sf2Outer]);
305 BEAST_EXPECT(st[~sf2Outer] == std::nullopt);
306 except([&]() {
return st[sf2Outer] == 0; });
307 BEAST_EXPECT(!!st[~sf3Outer]);
308 BEAST_EXPECT(st[~sf3Outer] != std::nullopt);
309 BEAST_EXPECT(st[sf3Outer] == 0);
310 except([&]() { st[~sf1Outer] = std::nullopt; });
312 BEAST_EXPECT(st[sf1Outer] == 1);
313 BEAST_EXPECT(*st[~sf1Outer] == 1);
314 BEAST_EXPECT(!!st[~sf1Outer]);
316 BEAST_EXPECT(st[sf1Outer] == 0);
317 BEAST_EXPECT(*st[~sf1Outer] == 0);
318 BEAST_EXPECT(!!st[~sf1Outer]);
320 BEAST_EXPECT(st[sf2Outer] == 2);
321 BEAST_EXPECT(*st[~sf2Outer] == 2);
322 BEAST_EXPECT(!!st[~sf2Outer]);
323 st[~sf2Outer] = std::nullopt;
324 except([&]() {
return *st[~sf2Outer]; });
325 BEAST_EXPECT(!st[~sf2Outer]);
327 BEAST_EXPECT(st[sf3Outer] == 3);
328 BEAST_EXPECT(*st[~sf3Outer] == 3);
329 BEAST_EXPECT(!!st[~sf3Outer]);
331 BEAST_EXPECT(st[sf3Outer] == 2);
332 BEAST_EXPECT(*st[~sf3Outer] == 2);
333 BEAST_EXPECT(!!st[~sf3Outer]);
335 BEAST_EXPECT(st[sf3Outer] == 0);
336 BEAST_EXPECT(*st[~sf3Outer] == 0);
337 BEAST_EXPECT(!!st[~sf3Outer]);
338 except([&]() { st[~sf3Outer] = std::nullopt; });
339 BEAST_EXPECT(st[sf3Outer] == 0);
340 BEAST_EXPECT(*st[~sf3Outer] == 0);
341 BEAST_EXPECT(!!st[~sf3Outer]);
343 BEAST_EXPECT(st[sf1Outer] == 1);
345 BEAST_EXPECT(st[sf4Outer] ==
STAmount{1});
347 BEAST_EXPECT(st[sf4Outer] ==
STAmount{2});
349 BEAST_EXPECT(st[sf1Outer] == 0);
351 BEAST_EXPECT(st[sf4Outer] ==
STAmount{1});
358 auto const v = ~st[~sf1Outer];
380 BEAST_EXPECT(!b.
empty());
381 st[sf4] = std::move(b);
382 BEAST_EXPECT(b.
empty());
383 BEAST_EXPECT(
Slice(st[sf4]).size() == 1);
384 st[~sf4] = std::nullopt;
385 BEAST_EXPECT(!~st[~sf4]);
388 BEAST_EXPECT(b.
size() == 2);
389 BEAST_EXPECT(
Slice(st[sf4]).size() == 2);
391 BEAST_EXPECT(
Slice(st[sf4]).size() == 2);
392 BEAST_EXPECT(
Slice(st[sf5]).size() == 2);
396 BEAST_EXPECT(st[sf5] ==
Slice{});
397 BEAST_EXPECT(!!st[~sf5]);
398 BEAST_EXPECT(!!~st[~sf5]);
400 st[sf5] = std::move(b);
401 BEAST_EXPECT(b.
empty());
402 BEAST_EXPECT(
Slice(st[sf5]).size() == 1);
403 st[~sf4] = std::nullopt;
404 BEAST_EXPECT(!~st[~sf4]);
412 BEAST_EXPECT(!st[~sf5]);
415 st[~sf5] = std::nullopt;
421 auto const& sf = sfIndexes;
427 st[sf] = std::move(v);
428 auto const& cst = st;
429 BEAST_EXPECT(cst[sf].size() == 2);
430 BEAST_EXPECT(cst[~sf]->size() == 2);
431 BEAST_EXPECT(cst[sf][0] == 1);
432 BEAST_EXPECT(cst[sf][1] == 2);
439 auto const& sf1 = sfIndexes;
440 auto const& sf2 = sfHashes;
441 auto const& sf3 = sfAmendments;
450 BEAST_EXPECT(cst[sf1].empty());
451 BEAST_EXPECT(!cst[~sf2]);
452 BEAST_EXPECT(cst[sf3].empty());
456 BEAST_EXPECT(cst[sf1].size() == 1);
457 BEAST_EXPECT(cst[sf1][0] ==
uint256{1});
459 BEAST_EXPECT(cst[sf2].size() == 1);
460 BEAST_EXPECT(cst[sf2][0] ==
uint256{1});
461 st[~sf2] = std::nullopt;
462 BEAST_EXPECT(!st[~sf2]);
464 BEAST_EXPECT(cst[sf3].size() == 1);
465 BEAST_EXPECT(cst[sf3][0] ==
uint256{1});
467 BEAST_EXPECT(cst[sf3].empty());