113 Env env{*
this, features};
123 Account const issuer{
"issuer"};
125 env.fund(XRP(10000), buyer, issuer);
133 for (
int i = 0; i < kNftCount; ++i)
136 nftIDs.
emplace_back(token::getNextID(env, issuer, taxon, tfTransferable));
137 env(token::mint(issuer, taxon), Txflags(tfTransferable));
144 for (
uint256 const& nftID : nftIDs)
148 env(token::createOffer(issuer, nftID, XRP(0)), Txflags(tfSellNFToken));
154 for (
uint256 const& offer : offers)
156 env(token::acceptSellOffer(buyer, offer));
180 auto exerciseLopsided = [
this,
182 Env env{*
this, features};
186 env.fund(XRP(10000), buyer);
191 accounts.
reserve(seeds.size());
196 env.fund(XRP(10000), account);
209 offers.reserve(accounts.
size());
210 for (
Account const& account : accounts)
214 nftIDs.
emplace_back(token::getNextID(env, account, 0, tfTransferable));
215 env(token::mint(account, 0), Txflags(tfTransferable));
221 env(token::createOffer(account, nftID, XRP(0)),
222 token::Destination(buyer),
223 Txflags(tfSellNFToken));
228 for (
uint256 const& offer : offers)
230 env(token::acceptSellOffer(buyer, offer));
241 for (
uint256 const& nftID : nftIDs)
245 env(token::createOffer(buyer, nftID, XRP(100)), Txflags(tfSellNFToken));
248 env(token::cancelOffer(buyer, {offerID}));
254 params[jss::account] = buyer.human();
255 params[jss::type] =
"state";
256 return env.rpc(
"json",
"account_nfts",
to_string(params));
259 BEAST_EXPECT(buyerNFTs[jss::result][jss::account_nfts].size() == nftIDs.
size());
260 for (
json::Value const& ownedNFT : buyerNFTs[jss::result][jss::account_nfts])
263 BEAST_EXPECT(ownedID.
parseHex(ownedNFT[sfNFTokenID.jsonName].asString()));
268 if (BEAST_EXPECT(foundIter != nftIDs.
end()))
269 nftIDs.
erase(foundIter);
274 BEAST_EXPECT(nftIDs.
empty());
280 "sp6JS7f14BuwFY8Mw5p3b8jjQBBTK",
281 "sp6JS7f14BuwFY8Mw6F7X3EiGKazu",
282 "sp6JS7f14BuwFY8Mw6FxjntJJfKXq",
283 "sp6JS7f14BuwFY8Mw6eSF1ydEozJg",
284 "sp6JS7f14BuwFY8Mw6koPB91um2ej",
285 "sp6JS7f14BuwFY8Mw6m6D64iwquSe",
287 "sp6JS7f14BuwFY8Mw5rC43sN4adC2",
288 "sp6JS7f14BuwFY8Mw65L9DDQqgebz",
289 "sp6JS7f14BuwFY8Mw65nKvU8pPQNn",
290 "sp6JS7f14BuwFY8Mw6bxZLyTrdipw",
291 "sp6JS7f14BuwFY8Mw6d5abucntSoX",
292 "sp6JS7f14BuwFY8Mw6qXK5awrRRP8",
295 "sp6JS7f14BuwFY8Mw66EBtMxoMcCa",
296 "sp6JS7f14BuwFY8Mw66dGfE9jVfGv",
297 "sp6JS7f14BuwFY8Mw6APdZa7PH566",
298 "sp6JS7f14BuwFY8Mw6C3QX5CZyET5",
299 "sp6JS7f14BuwFY8Mw6CSysFf8GvaR",
300 "sp6JS7f14BuwFY8Mw6c7QSDmoAeRV",
301 "sp6JS7f14BuwFY8Mw6mvonveaZhW7",
302 "sp6JS7f14BuwFY8Mw6vtHHG7dYcXi",
304 "sp6JS7f14BuwFY8Mw66yppUNxESaw",
305 "sp6JS7f14BuwFY8Mw6ATYQvobXiDT",
306 "sp6JS7f14BuwFY8Mw6bis8D1Wa9Uy",
307 "sp6JS7f14BuwFY8Mw6cTiGCWA8Wfa",
308 "sp6JS7f14BuwFY8Mw6eAy2fpXmyYf",
309 "sp6JS7f14BuwFY8Mw6icn58TRs8YG",
311 "sp6JS7f14BuwFY8Mw68tj2eQEWoJt",
312 "sp6JS7f14BuwFY8Mw6AjnAinNnMHT",
313 "sp6JS7f14BuwFY8Mw6CKDUwB4LrhL",
314 "sp6JS7f14BuwFY8Mw6d2yPszEFA6J",
315 "sp6JS7f14BuwFY8Mw6jcBQBH3PfnB",
316 "sp6JS7f14BuwFY8Mw6qxx19KSnN1w",
320 "sp6JS7f14BuwFY8Mw6ut1hFrqWoY5",
326 "sp6JS7f14BuwFY8Mw5p3b8jjQBBTK",
327 "sp6JS7f14BuwFY8Mw6F7X3EiGKazu",
328 "sp6JS7f14BuwFY8Mw6FxjntJJfKXq",
329 "sp6JS7f14BuwFY8Mw6eSF1ydEozJg",
330 "sp6JS7f14BuwFY8Mw6koPB91um2ej",
331 "sp6JS7f14BuwFY8Mw6m6D64iwquSe",
333 "sp6JS7f14BuwFY8Mw5rC43sN4adC2",
334 "sp6JS7f14BuwFY8Mw65L9DDQqgebz",
335 "sp6JS7f14BuwFY8Mw65nKvU8pPQNn",
336 "sp6JS7f14BuwFY8Mw6bxZLyTrdipw",
337 "sp6JS7f14BuwFY8Mw6d5abucntSoX",
338 "sp6JS7f14BuwFY8Mw6qXK5awrRRP8",
341 "sp6JS7f14BuwFY8Mw66EBtMxoMcCa",
342 "sp6JS7f14BuwFY8Mw66dGfE9jVfGv",
343 "sp6JS7f14BuwFY8Mw6APdZa7PH566",
344 "sp6JS7f14BuwFY8Mw6C3QX5CZyET5",
345 "sp6JS7f14BuwFY8Mw6CSysFf8GvaR",
346 "sp6JS7f14BuwFY8Mw6c7QSDmoAeRV",
347 "sp6JS7f14BuwFY8Mw6mvonveaZhW7",
348 "sp6JS7f14BuwFY8Mw6vtHHG7dYcXi",
350 "sp6JS7f14BuwFY8Mw66yppUNxESaw",
351 "sp6JS7f14BuwFY8Mw6ATYQvobXiDT",
352 "sp6JS7f14BuwFY8Mw6bis8D1Wa9Uy",
353 "sp6JS7f14BuwFY8Mw6cTiGCWA8Wfa",
354 "sp6JS7f14BuwFY8Mw6eAy2fpXmyYf",
355 "sp6JS7f14BuwFY8Mw6icn58TRs8YG",
357 "sp6JS7f14BuwFY8Mw68tj2eQEWoJt",
358 "sp6JS7f14BuwFY8Mw6AjnAinNnMHT",
359 "sp6JS7f14BuwFY8Mw6CKDUwB4LrhL",
360 "sp6JS7f14BuwFY8Mw6d2yPszEFA6J",
361 "sp6JS7f14BuwFY8Mw6jcBQBH3PfnB",
362 "sp6JS7f14BuwFY8Mw6qxx19KSnN1w",
366 "sp6JS7f14BuwFY8Mw6xCigaMwC6Dp",
370 exerciseLopsided(kSplitAndAddToHi);
371 exerciseLopsided(kSplitAndAddToLo);
392 env.fund(XRP(10000), buyer);
397 accounts.
reserve(seeds.size());
402 env.fund(XRP(10000), account);
415 offers.reserve(accounts.
size());
416 for (
Account const& account : accounts)
420 nftIDs.
emplace_back(token::getNextID(env, account, 0, tfTransferable));
421 env(token::mint(account, 0), Txflags(tfTransferable));
427 env(token::createOffer(account, nftID, XRP(0)),
428 token::Destination(buyer),
429 Txflags(tfSellNFToken));
435 for (
std::size_t i = 0; i < offers.size() - 1; ++i)
437 env(token::acceptSellOffer(buyer, offers[i]));
441 env(token::acceptSellOffer(buyer, offers.back()));
451 for (
uint256 const& nftID : nftIDs)
455 env(token::createOffer(buyer, nftID, XRP(100)), Txflags(tfSellNFToken));
458 env(token::cancelOffer(buyer, {offerID}));
464 params[jss::account] = buyer.human();
465 params[jss::type] =
"state";
466 return env.rpc(
"json",
"account_nfts",
to_string(params));
469 BEAST_EXPECT(buyerNFTs[jss::result][jss::account_nfts].size() == nftIDs.
size());
470 for (
json::Value const& ownedNFT : buyerNFTs[jss::result][jss::account_nfts])
473 BEAST_EXPECT(ownedID.
parseHex(ownedNFT[sfNFTokenID.jsonName].asString()));
478 if (BEAST_EXPECT(foundIter != nftIDs.
end()))
479 nftIDs.
erase(foundIter);
484 BEAST_EXPECT(nftIDs.
empty());
491 "sp6JS7f14BuwFY8Mw5EYu5z86hKDL",
492 "sp6JS7f14BuwFY8Mw5PUAMwc5ygd7",
493 "sp6JS7f14BuwFY8Mw5R3xUBcLSeTs",
494 "sp6JS7f14BuwFY8Mw5W6oS5sdC3oF",
495 "sp6JS7f14BuwFY8Mw5pYc3D9iuLcw",
496 "sp6JS7f14BuwFY8Mw5pfGVnhcdp3b",
497 "sp6JS7f14BuwFY8Mw6jS6RdEqXqrN",
498 "sp6JS7f14BuwFY8Mw6krt6AKbvRXW",
499 "sp6JS7f14BuwFY8Mw6mnVBQq7cAN2",
500 "sp6JS7f14BuwFY8Mw8ECJxPjmkufQ",
501 "sp6JS7f14BuwFY8Mw8asgzcceGWYm",
502 "sp6JS7f14BuwFY8MwF6J3FXnPCgL8",
503 "sp6JS7f14BuwFY8MwFEud2w5czv5q",
504 "sp6JS7f14BuwFY8MwFNxKVqJnx8P5",
505 "sp6JS7f14BuwFY8MwFnTCXg3eRidL",
506 "sp6JS7f14BuwFY8Mwj47hv1vrDge6",
509 "sp6JS7f14BuwFY8MwjJCwYr9zSfAv",
510 "sp6JS7f14BuwFY8MwjYa5yLkgCLuT",
511 "sp6JS7f14BuwFY8MwjenxuJ3TH2Bc",
512 "sp6JS7f14BuwFY8MwjriN7Ui11NzB",
513 "sp6JS7f14BuwFY8Mwk3AuoJNSEo34",
514 "sp6JS7f14BuwFY8MwkT36hnRv8hTo",
515 "sp6JS7f14BuwFY8MwkTQixEXfi1Cr",
516 "sp6JS7f14BuwFY8MwkYJaZM1yTJBF",
517 "sp6JS7f14BuwFY8Mwkc4k1uo85qp2",
518 "sp6JS7f14BuwFY8Mwkf7cFhF1uuxx",
519 "sp6JS7f14BuwFY8MwmCK2un99wb4e",
520 "sp6JS7f14BuwFY8MwmETztNHYu2Bx",
521 "sp6JS7f14BuwFY8MwmJws9UwRASfR",
522 "sp6JS7f14BuwFY8MwoH5PQkGK8tEb",
523 "sp6JS7f14BuwFY8MwoVXtP2yCzjJV",
524 "sp6JS7f14BuwFY8MwobxRXA9vsTeX",
525 "sp6JS7f14BuwFY8Mwos3pc5Gb3ihU",
532 "sp6JS7f14BuwFY8Mw5EYu5z86hKDL",
533 "sp6JS7f14BuwFY8Mw5PUAMwc5ygd7",
534 "sp6JS7f14BuwFY8Mw5R3xUBcLSeTs",
535 "sp6JS7f14BuwFY8Mw5W6oS5sdC3oF",
536 "sp6JS7f14BuwFY8Mw5pYc3D9iuLcw",
537 "sp6JS7f14BuwFY8Mw5pfGVnhcdp3b",
538 "sp6JS7f14BuwFY8Mw6jS6RdEqXqrN",
539 "sp6JS7f14BuwFY8Mw6krt6AKbvRXW",
540 "sp6JS7f14BuwFY8Mw6mnVBQq7cAN2",
541 "sp6JS7f14BuwFY8Mw8ECJxPjmkufQ",
542 "sp6JS7f14BuwFY8Mw8asgzcceGWYm",
543 "sp6JS7f14BuwFY8MwF6J3FXnPCgL8",
544 "sp6JS7f14BuwFY8MwFEud2w5czv5q",
545 "sp6JS7f14BuwFY8MwFNxKVqJnx8P5",
546 "sp6JS7f14BuwFY8MwFnTCXg3eRidL",
547 "sp6JS7f14BuwFY8Mwj47hv1vrDge6",
548 "sp6JS7f14BuwFY8Mwj6TYekeeyukh",
551 "sp6JS7f14BuwFY8MwjYa5yLkgCLuT",
552 "sp6JS7f14BuwFY8MwjenxuJ3TH2Bc",
553 "sp6JS7f14BuwFY8MwjriN7Ui11NzB",
554 "sp6JS7f14BuwFY8Mwk3AuoJNSEo34",
555 "sp6JS7f14BuwFY8MwkT36hnRv8hTo",
556 "sp6JS7f14BuwFY8MwkTQixEXfi1Cr",
557 "sp6JS7f14BuwFY8MwkYJaZM1yTJBF",
558 "sp6JS7f14BuwFY8Mwkc4k1uo85qp2",
559 "sp6JS7f14BuwFY8Mwkf7cFhF1uuxx",
560 "sp6JS7f14BuwFY8MwmCK2un99wb4e",
561 "sp6JS7f14BuwFY8MwmETztNHYu2Bx",
562 "sp6JS7f14BuwFY8MwmJws9UwRASfR",
563 "sp6JS7f14BuwFY8MwoH5PQkGK8tEb",
564 "sp6JS7f14BuwFY8MwoVXtP2yCzjJV",
565 "sp6JS7f14BuwFY8MwobxRXA9vsTeX",
566 "sp6JS7f14BuwFY8Mwos3pc5Gb3ihU",
570 exercise(kSeventeenHi);
571 exercise(kSeventeenLo);
583 Env env{*
this, features};
587 env.fund(XRP(10000), buyer);
593 "sp6JS7f14BuwFY8Mw5FnqmbciPvH6",
594 "sp6JS7f14BuwFY8Mw5MBGbyMSsXLp",
595 "sp6JS7f14BuwFY8Mw5S4PnDyBdKKm",
596 "sp6JS7f14BuwFY8Mw6kcXpM2enE35",
597 "sp6JS7f14BuwFY8Mw6tuuSMMwyJ44",
598 "sp6JS7f14BuwFY8Mw8E8JWLQ1P8pt",
599 "sp6JS7f14BuwFY8Mw8WwdgWkCHhEx",
600 "sp6JS7f14BuwFY8Mw8XDUYvU6oGhQ",
601 "sp6JS7f14BuwFY8Mw8ceVGL4M1zLQ",
602 "sp6JS7f14BuwFY8Mw8fdSwLCZWDFd",
603 "sp6JS7f14BuwFY8Mw8zuF6Fg65i1E",
604 "sp6JS7f14BuwFY8MwF2k7bihVfqes",
605 "sp6JS7f14BuwFY8MwF6X24WXGn557",
606 "sp6JS7f14BuwFY8MwFMpn7strjekg",
607 "sp6JS7f14BuwFY8MwFSdy9sYVrwJs",
608 "sp6JS7f14BuwFY8MwFdMcLy9UkrXn",
609 "sp6JS7f14BuwFY8MwFdbwFm1AAboa",
610 "sp6JS7f14BuwFY8MwFdr5AhKThVtU",
611 "sp6JS7f14BuwFY8MwjFc3Q9YatvAw",
612 "sp6JS7f14BuwFY8MwjRXcNs1ozEXn",
613 "sp6JS7f14BuwFY8MwkQGUKL7v1FBt",
614 "sp6JS7f14BuwFY8Mwkamsoxx1wECt",
615 "sp6JS7f14BuwFY8Mwm3hus1dG6U8y",
616 "sp6JS7f14BuwFY8Mwm589M8vMRpXF",
617 "sp6JS7f14BuwFY8MwmJTRJ4Fqz1A3",
618 "sp6JS7f14BuwFY8MwmRfy8fer4QbL",
619 "sp6JS7f14BuwFY8MwmkkFx1HtgWRx",
620 "sp6JS7f14BuwFY8MwmwP9JFdKa4PS",
621 "sp6JS7f14BuwFY8MwoXWJLB3ciHfo",
622 "sp6JS7f14BuwFY8MwoYc1gTtT2mWL",
623 "sp6JS7f14BuwFY8MwogXtHH7FNVoo",
624 "sp6JS7f14BuwFY8MwoqYoA9P8gf3r",
625 "sp6JS7f14BuwFY8MwoujwMJofGnsA",
635 env.fund(XRP(10000), account);
647 offers.reserve(accounts.
size());
648 for (
Account const& account : accounts)
652 nftIDs.
emplace_back(token::getNextID(env, account, 0, tfTransferable));
653 env(token::mint(account, 0), Txflags(tfTransferable));
659 env(token::createOffer(account, nftID, XRP(0)),
660 token::Destination(buyer),
661 Txflags(tfSellNFToken));
667 for (
uint256 const& nftID : nftIDs)
675 uint256 const offerForPageOverflow = offers.back();
679 for (
uint256 const& offer : offers)
681 env(token::acceptSellOffer(buyer, offer));
692 for (
uint256 const& nftID : nftIDs)
696 env(token::createOffer(buyer, nftID, XRP(100)), Txflags(tfSellNFToken));
699 env(token::cancelOffer(buyer, {offerID}));
705 params[jss::account] = buyer.human();
706 params[jss::type] =
"state";
707 return env.rpc(
"json",
"account_nfts",
to_string(params));
710 BEAST_EXPECT(buyerNFTs[jss::result][jss::account_nfts].size() == nftIDs.
size());
711 for (
json::Value const& ownedNFT : buyerNFTs[jss::result][jss::account_nfts])
714 BEAST_EXPECT(ownedID.
parseHex(ownedNFT[sfNFTokenID.jsonName].asString()));
719 if (BEAST_EXPECT(foundIter != nftIDs.
end()))
720 nftIDs.
erase(foundIter);
724 BEAST_EXPECT(nftIDs.
empty());
727 env(token::mint(buyer, 0), Txflags(tfTransferable), Ter(
expect));
745 testcase(
"NFToken consecutive packing");
749 Env env{*
this, features};
753 env.fund(XRP(10000), buyer);
759 "sp6JS7f14BuwFY8Mw56vZeiBuhePx",
760 "sp6JS7f14BuwFY8Mw5BodF9tGuTUe",
761 "sp6JS7f14BuwFY8Mw5EnhC1cg84J7",
762 "sp6JS7f14BuwFY8Mw5P913Cunr2BK",
763 "sp6JS7f14BuwFY8Mw5Pru7eLo1XzT",
764 "sp6JS7f14BuwFY8Mw61SLUC8UX2m8",
765 "sp6JS7f14BuwFY8Mw6AsBF9TpeMpq",
766 "sp6JS7f14BuwFY8Mw84XqrBZkU2vE",
767 "sp6JS7f14BuwFY8Mw89oSU6dBk3KB",
768 "sp6JS7f14BuwFY8Mw89qUKCyDmyzj",
769 "sp6JS7f14BuwFY8Mw8GfqQ9VRZ8tm",
770 "sp6JS7f14BuwFY8Mw8LtW3VqrqMks",
771 "sp6JS7f14BuwFY8Mw8ZrAkJc2sHew",
772 "sp6JS7f14BuwFY8Mw8jpkYSNrD3ah",
773 "sp6JS7f14BuwFY8MwF2mshd786m3V",
774 "sp6JS7f14BuwFY8MwFHfXq9x5NbPY",
775 "sp6JS7f14BuwFY8MwFrjWq5LAB8NT",
776 "sp6JS7f14BuwFY8Mwj4asgSh6hQZd",
777 "sp6JS7f14BuwFY8Mwj7ipFfqBSRrE",
778 "sp6JS7f14BuwFY8MwjHqtcvGav8uW",
779 "sp6JS7f14BuwFY8MwjLp4sk5fmzki",
780 "sp6JS7f14BuwFY8MwjioHuYb3Ytkx",
781 "sp6JS7f14BuwFY8MwkRjHPXWi7fGN",
782 "sp6JS7f14BuwFY8MwkdVdPV3LjNN1",
783 "sp6JS7f14BuwFY8MwkxUtVY5AXZFk",
784 "sp6JS7f14BuwFY8Mwm4jQzdfTbY9F",
785 "sp6JS7f14BuwFY8MwmCucYAqNp4iF",
786 "sp6JS7f14BuwFY8Mwo2bgdFtxBzpF",
787 "sp6JS7f14BuwFY8MwoGwD7v4U6qBh",
788 "sp6JS7f14BuwFY8MwoUczqFADMoXi",
789 "sp6JS7f14BuwFY8MwoY1xZeGd3gAr",
790 "sp6JS7f14BuwFY8MwomVCbfkv4kYZ",
791 "sp6JS7f14BuwFY8MwoqbrPSr4z13F",
801 env.fund(XRP(10000), account);
813 for (
auto& vec : nftIDsByPage)
814 vec.reserve(accounts.
size());
816 for (
auto& vec : offers)
817 vec.reserve(accounts.
size());
820 for (
Account const& account : accounts)
825 uint256 const& nftID = nftIDsByPage[i].emplace_back(
826 token::getNextID(env, account, taxon, tfTransferable));
827 env(token::mint(account, taxon), Txflags(tfTransferable));
831 offers[i].emplace_back(
833 env(token::createOffer(account, nftID, XRP(0)),
834 token::Destination(buyer),
835 Txflags(tfSellNFToken));
842 for (
auto const& vec : nftIDsByPage)
845 for (
uint256 const& nftID : vec)
860 overflowNFTs.
push_back(nftIDsByPage[i].back());
861 nftIDsByPage[i].pop_back();
862 BEAST_EXPECT(nftIDsByPage[i].size() == kSeeds.
size() - 1);
864 overflowOffers.
push_back(offers[i].back());
865 offers[i].pop_back();
866 BEAST_EXPECT(offers[i].size() == kSeeds.
size() - 1);
874 for (
uint256 const& offer : offers[i])
876 env(token::acceptSellOffer(buyer, offer));
883 for (
uint256 const& offer : overflowOffers)
893 for (
auto const& vec : nftIDsByPage)
895 for (
uint256 const& nftID : vec)
897 env(token::createOffer(buyer, nftID, XRP(100)), Txflags(tfSellNFToken));
908 json::Value buyerOffers = [&env, &buyer, &marker]() {
910 params[jss::account] = buyer.human();
911 params[jss::type] = jss::nft_offer;
914 params[jss::marker] = marker;
915 return env.rpc(
"json",
"account_objects",
to_string(params));
919 if (buyerOffers.
isMember(jss::result))
924 marker = result[jss::marker].
asString();
926 if (result.
isMember(jss::account_objects))
928 json::Value& someOffers = result[jss::account_objects];
930 ownedNftOffers.
append(someOffers[i]);
933 }
while (!marker.
empty());
938 for (
auto const& vec : nftIDsByPage)
939 totalOwnedNFTs += vec.size();
940 BEAST_EXPECT(ownedNftOffers.
size() == totalOwnedNFTs);
948 for (
auto const& offer : ownedNftOffers)
950 if (offer.isMember(jss::index))
953 if (offerIndex.
parseHex(offer[jss::index].asString()))
957 env(token::cancelOffer(buyer, cancelOffers));
964 params[jss::account] = buyer.human();
965 params[jss::type] = jss::nft_offer;
967 return env.rpc(
"json",
"account_objects",
to_string(params));
970 remainingOffers.
isMember(jss::result) &&
971 remainingOffers[jss::result].
isMember(jss::account_objects) &&
972 remainingOffers[jss::result][jss::account_objects].
size() == 0);
981 json::Value buyerNFTs = [&env, &buyer, &marker]() {
983 params[jss::account] = buyer.human();
984 params[jss::type] =
"state";
987 params[jss::marker] = marker;
988 return env.rpc(
"json",
"account_nfts",
to_string(params));
992 if (buyerNFTs.
isMember(jss::result))
997 marker = result[jss::marker].
asString();
999 if (result.
isMember(jss::account_nfts))
1001 json::Value& someNFTs = result[jss::account_nfts];
1003 ownedNFTs.
append(someNFTs[i]);
1006 }
while (!marker.
empty());
1010 for (
auto& vec : nftIDsByPage)
1011 allNftIDs.
insert(vec.begin(), vec.end());
1013 BEAST_EXPECT(ownedNFTs.
size() == allNftIDs.
size());
1017 if (ownedNFT.isMember(sfNFTokenID.jsonName))
1020 BEAST_EXPECT(ownedID.
parseHex(ownedNFT[sfNFTokenID.jsonName].asString()));
1021 auto const foundIter = allNftIDs.
find(ownedID);
1025 if (BEAST_EXPECT(foundIter != allNftIDs.
end()))
1026 allNftIDs.
erase(foundIter);
1031 BEAST_EXPECT(allNftIDs.
empty());