3#include <xrpl/beast/unit_test.h> 
    4#include <xrpl/protocol/Feature.h> 
   18        Env env(*
this, features);
 
   20        auto const gw = 
Account(
"gateway");
 
   21        auto const USD = gw[
"USD"];
 
   23        env.
fund(
XRP(100000000), gw, 
"alice", 
"bob", 
"carol", 
"dan");
 
   24        env.
trust(USD(1), 
"bob");
 
   25        env(
pay(gw, 
"bob", USD(1)));
 
   26        env.
trust(USD(1), 
"dan");
 
   27        env(
pay(gw, 
"dan", USD(1)));
 
   33        env(
offer(
"alice", USD(1000), 
XRP(1000)));
 
   43        env(
offer(
"carol", USD(1000), 
XRP(1000)));
 
 
   58        Env env(*
this, features);
 
   60        auto const gw = 
Account(
"gateway");
 
   61        auto const USD = gw[
"USD"];
 
   64        int const maxConsumed = 1000;
 
   66        env.
fund(
XRP(100000000), gw, 
"alice", 
"bob", 
"carol");
 
   67        int const bobsOfferCount = maxConsumed + 150;
 
   68        env.
trust(USD(bobsOfferCount), 
"bob");
 
   69        env(
pay(gw, 
"bob", USD(bobsOfferCount)));
 
   71        n_offers(env, bobsOfferCount, 
"bob", 
XRP(1), USD(1));
 
   75        env(
offer(
"alice", USD(bobsOfferCount), 
XRP(bobsOfferCount)));
 
   83        env(
offer(
"carol", USD(1000), 
XRP(1000)));
 
 
   96        Env env(*
this, features);
 
   98        auto const gw = 
Account(
"gateway");
 
   99        auto const USD = gw[
"USD"];
 
  101        env.
fund(
XRP(100000000), gw, 
"alice", 
"bob", 
"carol", 
"dan", 
"evita");
 
  104        int const maxConsumed = 1000;
 
  106        int const evitasOfferCount{maxConsumed + 49};
 
  107        env.
trust(USD(1000), 
"alice");
 
  108        env(
pay(gw, 
"alice", USD(1000)));
 
  109        env.
trust(USD(1000), 
"carol");
 
  110        env(
pay(gw, 
"carol", USD(1)));
 
  111        env.
trust(USD(evitasOfferCount + 1), 
"evita");
 
  112        env(
pay(gw, 
"evita", USD(evitasOfferCount + 1)));
 
  115        int const carolsOfferCount{700};
 
  117        n_offers(env, carolsOfferCount, 
"carol", 
XRP(1), USD(1));
 
  118        n_offers(env, evitasOfferCount, 
"evita", 
XRP(1), USD(1));
 
  123        env(
offer(
"bob", USD(1000), 
XRP(1000)));
 
  135        env(
offer(
"dan", USD(maxConsumed + 50), 
XRP(maxConsumed + 50)));
 
 
  149        testcase(
"Auto Bridged Limits Taker");
 
  152        Env env(*
this, features);
 
  154        auto const gw = 
Account(
"gateway");
 
  155        auto const USD = gw[
"USD"];
 
  156        auto const EUR = gw[
"EUR"];
 
  158        env.
fund(
XRP(100000000), gw, 
"alice", 
"bob", 
"carol", 
"dan", 
"evita");
 
  160        env.
trust(USD(2000), 
"alice");
 
  161        env(
pay(gw, 
"alice", USD(2000)));
 
  162        env.
trust(USD(1000), 
"carol");
 
  163        env(
pay(gw, 
"carol", USD(3)));
 
  164        env.
trust(USD(1000), 
"evita");
 
  165        env(
pay(gw, 
"evita", USD(1000)));
 
  170        n_offers(env, 1001, 
"evita", EUR(1), USD(1));
 
  188        env.
trust(EUR(10000), 
"bob");
 
  190        env(
pay(gw, 
"bob", EUR(1000)));
 
  192        env(
offer(
"bob", USD(2000), EUR(2000)));
 
  217        env.
trust(EUR(10000), 
"dan");
 
  219        env(
pay(gw, 
"dan", EUR(1000)));
 
  222        env(
offer(
"dan", USD(900), EUR(900)));
 
 
  253        auto const gw = 
Account(
"gateway");
 
  254        auto const alice = 
Account(
"alice");
 
  255        auto const bob = 
Account(
"bob");
 
  256        auto const carol = 
Account(
"carol");
 
  258        auto const USD = gw[
"USD"];
 
  259        auto const EUR = gw[
"EUR"];
 
  274            Env env(*
this, features);
 
  276            env.
fund(
XRP(100000000), gw, alice, bob, carol);
 
  278            env.
trust(USD(4000), alice);
 
  279            env(
pay(gw, alice, USD(4000)));
 
  280            env.
trust(USD(1000), carol);
 
  281            env(
pay(gw, carol, USD(3)));
 
  288                env, 801, carol, 
XRP(1), USD(3));  
 
  291            n_offers(env, 1, alice, EUR(500), USD(500));
 
  331            env.
trust(EUR(10000), bob);
 
  333            env(
pay(gw, bob, EUR(2000)));
 
  335            env(
offer(bob, USD(4000), EUR(4000)));
 
  345            auto const numAOffers =
 
  346                2000 + 100 + 1000 + 1 - (2 * 100 + 2 * 199 + 1 + 1);
 
  353            Env env(*
this, features);
 
  355            env.
fund(
XRP(100000000), gw, alice, bob, carol);
 
  357            env.
trust(USD(4000), alice);
 
  358            env(
pay(gw, alice, USD(4000)));
 
  359            env.
trust(USD(1000), carol);
 
  360            env(
pay(gw, carol, USD(3)));
 
  364            n_offers(env, 1, alice, EUR(1), USD(10));
 
  368                env, 801, carol, 
XRP(1), USD(3));  
 
  371            n_offers(env, 1, alice, EUR(499), USD(499));
 
  404            env.
trust(EUR(10000), bob);
 
  406            env(
pay(gw, bob, EUR(2000)));
 
  408            env(
offer(bob, USD(4000), EUR(4000)));
 
  418            auto const numAOffers =
 
  419                1 + 2000 + 100 + 1000 + 1 - (1 + 2 * 100 + 2 * 199 + 1 + 1);
 
 
  434        auto const gw = 
Account(
"gateway");
 
  435        auto const alice = 
Account(
"alice");
 
  436        auto const bob = 
Account(
"bob");
 
  438        auto const USD = gw[
"USD"];
 
  440        Env env(*
this, features);
 
  442        env.
fund(
XRP(100000000), gw, alice, bob);
 
  444        env.
trust(USD(8000), alice);
 
  445        env.
trust(USD(8000), bob);
 
  448        env(
pay(gw, alice, USD(8000)));
 
  477        bool const withSortStrands = features[featureFlowSortStrands];
 
  479        auto const expectedTER = [&]() -> 
TER {
 
  480            if (!withSortStrands)
 
  485        env(
offer(bob, USD(8000), 
XRP(8000)), 
ter(expectedTER));
 
  488        auto const expectedUSD = [&] {
 
  489            if (!withSortStrands)
 
 
  510        testAll(sa - featureFlowSortStrands);
 
  511        testAll(sa - featurePermissionedDEX);
 
  512        testAll(sa - featureFlowSortStrands - featurePermissionedDEX);
 
 
 
  516BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(CrossingLimits, app, 
ripple, 10);
 
testcase_t testcase
Memberspace for declaring test cases.
 
void testStepAndCrossingLimit(FeatureBitset features)
 
void testAutoBridgedLimitsTaker(FeatureBitset features)
 
void testAutoBridgedLimits(FeatureBitset features)
 
void testStepLimit(FeatureBitset features)
 
void testCrossingLimit(FeatureBitset features)
 
void run() override
Runs the suite.
 
void testOfferOverflow(FeatureBitset features)
 
Immutable cryptographic account descriptor.
 
A transaction testing environment.
 
void require(Args const &... args)
Check a set of requirements.
 
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
 
void trust(STAmount const &amount, Account const &account)
Establish trust lines.
 
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
 
Match the number of items in the account's owner directory.
 
Set the expected result code for a JTx The test will fail if the code doesn't match.
 
owner_count< ltOFFER > offers
Match the number of offers in the account's owner directory.
 
Json::Value pay(AccountID const &account, AccountID const &to, AnyAmount amount)
Create a payment.
 
void n_offers(Env &env, std::size_t n, Account const &account, STAmount const &in, STAmount const &out)
 
FeatureBitset testable_amendments()
 
Json::Value offer(Account const &account, STAmount const &takerPays, STAmount const &takerGets, std::uint32_t flags)
Create an offer.
 
XRP_t const XRP
Converts to XRP Issue or STAmount.
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.