247 except<std::runtime_error>(
256 BEAST_EXPECT(shouldBeInvalid ==
sfInvalid);
258 testInvalid(STI_VL, 255);
259 testInvalid(STI_UINT256, 255);
260 testInvalid(STI_UINT32, 255);
261 testInvalid(STI_VECTOR256, 255);
262 testInvalid(STI_OBJECT, 255);
266 except<std::runtime_error>(
271 except<std::runtime_error>([&]() {
280 SField const& sfTestVL = sfMasterSignature;
281 SField const& sfTestH256 = sfCheckID;
282 SField const& sfTestU32 = sfSettleDelay;
283 SField const& sfTestV256 = sfAmendments;
284 SField const& sfTestObject = sfMajority;
294 STObject object1(elements, sfTestObject);
317 fail(
"STObject error 4");
338 unexpected(copy.isFieldPresent(sfTestH256),
"STObject error 9");
342 "STObject error 10");
344 copy.setFieldU32(sfTestU32, 1);
348 "STObject error 11");
350 for (
int i = 0; i < 1000; i++)
360 STObject object3(elements, it, sfTestObject);
370 for (
int i = 0; i < uints.
capacity(); ++i)
380 STObject object3(elements, it, sfTestObject);
385 BEAST_EXPECT(uints1 == uints3);
395 auto const& sf1Outer = sfSequence;
396 auto const& sf2Outer = sfExpiration;
397 auto const& sf3Outer = sfQualityIn;
398 auto const& sf4Outer = sfAmount;
399 auto const& sf4 = sfSignature;
400 auto const& sf5 = sfPublicKey;
405 auto const st = [&]() {
412 BEAST_EXPECT(st[sf1Outer] == 1);
413 BEAST_EXPECT(st[sf2Outer] == 2);
414 except<STObject::FieldErr>([&]() { st[sf3Outer]; });
415 BEAST_EXPECT(*st[~sf1Outer] == 1);
416 BEAST_EXPECT(*st[~sf2Outer] == 2);
418 BEAST_EXPECT(!!st[~sf1Outer]);
419 BEAST_EXPECT(!!st[~sf2Outer]);
420 BEAST_EXPECT(!st[~sf3Outer]);
421 BEAST_EXPECT(st[sf1Outer] != st[sf2Outer]);
422 BEAST_EXPECT(st[~sf1Outer] != st[~sf2Outer]);
436 auto const st = [&]() {
443 BEAST_EXPECT(st[sf1Outer] == 1);
444 BEAST_EXPECT(st[sf2Outer] == 2);
445 BEAST_EXPECT(st[sf3Outer] == 0);
446 BEAST_EXPECT(*st[~sf1Outer] == 1);
447 BEAST_EXPECT(*st[~sf2Outer] == 2);
448 BEAST_EXPECT(*st[~sf3Outer] == 0);
449 BEAST_EXPECT(!!st[~sf1Outer]);
450 BEAST_EXPECT(!!st[~sf2Outer]);
451 BEAST_EXPECT(!!st[~sf3Outer]);
459 except([&]() {
return st[sf1Outer] == 0; });
463 BEAST_EXPECT(!st[~sf1Outer]);
465 BEAST_EXPECT(st[sf1Outer] == 2);
468 BEAST_EXPECT(!!st[~sf1Outer]);
470 BEAST_EXPECT(st[sf1Outer] == 1);
471 BEAST_EXPECT(!!st[sf1Outer]);
472 BEAST_EXPECT(!!st[~sf1Outer]);
474 BEAST_EXPECT(!st[sf1Outer]);
475 BEAST_EXPECT(!!st[~sf1Outer]);
477 BEAST_EXPECT(!st[~sf1Outer]);
481 BEAST_EXPECT(!st[~sf1Outer]);
482 except([&]() {
return st[sf1Outer] == 0; });
483 except([&]() {
return *st[~sf1Outer]; });
485 BEAST_EXPECT(st[sf1Outer] == 1);
486 BEAST_EXPECT(!!st[sf1Outer]);
487 BEAST_EXPECT(!!st[~sf1Outer]);
489 st[sf2Outer] = st[sf1Outer];
490 BEAST_EXPECT(st[sf1Outer] == 3);
491 BEAST_EXPECT(st[sf2Outer] == 3);
492 BEAST_EXPECT(st[sf2Outer] == st[sf1Outer]);
494 st[sf2Outer] = st[sf1Outer];
495 BEAST_EXPECT(st[sf1Outer] == 4);
496 BEAST_EXPECT(st[sf2Outer] == 4);
497 BEAST_EXPECT(st[sf2Outer] == st[sf1Outer]);
499 BEAST_EXPECT(st[sf1Outer] == 5);
501 BEAST_EXPECT(st[sf4Outer] ==
STAmount{1});
503 BEAST_EXPECT(st[sf4Outer] ==
STAmount{2});
505 BEAST_EXPECT(st[sf1Outer] == 4);
507 BEAST_EXPECT(st[sf4Outer] ==
STAmount{1});
514 BEAST_EXPECT(!!st[~sf1Outer]);
516 BEAST_EXPECT(st[sf1Outer] == 0);
517 BEAST_EXPECT(*st[~sf1Outer] == 0);
518 BEAST_EXPECT(!st[~sf2Outer]);
520 except([&]() {
return st[sf2Outer] == 0; });
521 BEAST_EXPECT(!!st[~sf3Outer]);
523 BEAST_EXPECT(st[sf3Outer] == 0);
526 BEAST_EXPECT(st[sf1Outer] == 1);
527 BEAST_EXPECT(*st[~sf1Outer] == 1);
528 BEAST_EXPECT(!!st[~sf1Outer]);
530 BEAST_EXPECT(st[sf1Outer] == 0);
531 BEAST_EXPECT(*st[~sf1Outer] == 0);
532 BEAST_EXPECT(!!st[~sf1Outer]);
534 BEAST_EXPECT(st[sf2Outer] == 2);
535 BEAST_EXPECT(*st[~sf2Outer] == 2);
536 BEAST_EXPECT(!!st[~sf2Outer]);
538 except([&]() {
return *st[~sf2Outer]; });
539 BEAST_EXPECT(!st[~sf2Outer]);
541 BEAST_EXPECT(st[sf3Outer] == 3);
542 BEAST_EXPECT(*st[~sf3Outer] == 3);
543 BEAST_EXPECT(!!st[~sf3Outer]);
545 BEAST_EXPECT(st[sf3Outer] == 2);
546 BEAST_EXPECT(*st[~sf3Outer] == 2);
547 BEAST_EXPECT(!!st[~sf3Outer]);
549 BEAST_EXPECT(st[sf3Outer] == 0);
550 BEAST_EXPECT(*st[~sf3Outer] == 0);
551 BEAST_EXPECT(!!st[~sf3Outer]);
553 BEAST_EXPECT(st[sf3Outer] == 0);
554 BEAST_EXPECT(*st[~sf3Outer] == 0);
555 BEAST_EXPECT(!!st[~sf3Outer]);
557 BEAST_EXPECT(st[sf1Outer] == 1);
559 BEAST_EXPECT(st[sf4Outer] ==
STAmount{1});
561 BEAST_EXPECT(st[sf4Outer] ==
STAmount{2});
563 BEAST_EXPECT(st[sf1Outer] == 0);
565 BEAST_EXPECT(st[sf4Outer] ==
STAmount{1});
572 auto const v = ~st[~sf1Outer];
598 BEAST_EXPECT(!b.
empty());
599 st[sf4] = std::move(b);
600 BEAST_EXPECT(b.
empty());
601 BEAST_EXPECT(
Slice(st[sf4]).size() == 1);
603 BEAST_EXPECT(!~st[~sf4]);
606 BEAST_EXPECT(b.
size() == 2);
607 BEAST_EXPECT(
Slice(st[sf4]).size() == 2);
609 BEAST_EXPECT(
Slice(st[sf4]).size() == 2);
610 BEAST_EXPECT(
Slice(st[sf5]).size() == 2);
614 BEAST_EXPECT(st[sf5] ==
Slice{});
615 BEAST_EXPECT(!!st[~sf5]);
616 BEAST_EXPECT(!!~st[~sf5]);
618 st[sf5] = std::move(b);
619 BEAST_EXPECT(b.
empty());
620 BEAST_EXPECT(
Slice(st[sf5]).size() == 1);
622 BEAST_EXPECT(!~st[~sf4]);
630 BEAST_EXPECT(!st[~sf5]);
640 auto const& sf = sfIndexes;
646 st[sf] = std::move(v);
647 auto const& cst = st;
648 BEAST_EXPECT(cst[sf].size() == 2);
649 BEAST_EXPECT(cst[~sf]->size() == 2);
650 BEAST_EXPECT(cst[sf][0] == 1);
651 BEAST_EXPECT(cst[sf][1] == 2);
654 decltype(cst[sfIndexes]),
662 auto const& sf1 = sfIndexes;
663 auto const& sf2 = sfHashes;
664 auto const& sf3 = sfAmendments;
673 BEAST_EXPECT(cst[sf1].size() == 0);
674 BEAST_EXPECT(!cst[~sf2]);
675 BEAST_EXPECT(cst[sf3].size() == 0);
679 BEAST_EXPECT(cst[sf1].size() == 1);
680 BEAST_EXPECT(cst[sf1][0] ==
uint256{1});
682 BEAST_EXPECT(cst[sf2].size() == 1);
683 BEAST_EXPECT(cst[sf2][0] ==
uint256{1});
685 BEAST_EXPECT(!st[~sf2]);
687 BEAST_EXPECT(cst[sf3].size() == 1);
688 BEAST_EXPECT(cst[sf3][0] ==
uint256{1});
690 BEAST_EXPECT(cst[sf3].size() == 0);