41        auto const alice = 
Account(
"alice");
 
   42        auto const bob = 
Account(
"bob");
 
   43        auto const carol = 
Account(
"carol");
 
   44        auto const dan = 
Account(
"dan");
 
   45        auto const erin = 
Account(
"erin");
 
   46        auto const USDA = alice[
"USD"];
 
   47        auto const USDB = bob[
"USD"];
 
   48        auto const USDC = carol[
"USD"];
 
   49        auto const USDD = dan[
"USD"];
 
   51        auto const USD = gw[
"USD"];
 
   54            Env env(*
this, features);
 
   56            env.
fund(
XRP(10000), alice, bob, gw);
 
   58            env.
trust(USD(1000), alice, bob);
 
   59            env(
pay(gw, alice, USD(100)));
 
   60            env(
pay(alice, bob, USD(10)), 
paths(USD));
 
   65            Env env(*
this, features);
 
   67            env.
fund(
XRP(10000), alice, bob);
 
   69            env(
pay(alice, bob, 
XRP(100)));
 
   75            Env env(*
this, features);
 
   77            env.
fund(
XRP(10000), alice, bob, gw);
 
   79            env.
trust(USD(1000), alice, bob);
 
   80            env(
pay(gw, alice, USD(100)));
 
   83            env(
pay(alice, bob, USD(110)),
 
   90            Env env(*
this, features);
 
   92            env.
fund(
XRP(10000), alice, bob, carol, dan);
 
   94            env.
trust(USDA(10), bob);
 
   95            env.
trust(USDB(10), carol);
 
   96            env.
trust(USDC(10), dan);
 
   97            env(
pay(alice, dan, USDC(10)), 
paths(USDA));
 
  106            Env env(*
this, features);
 
  108            env.
fund(
XRP(10000), alice, bob, carol, dan);
 
  110            env.
trust(USDA(10), bob);
 
  111            env.
trust(USDB(10), alice, carol);
 
  112            env.
trust(USDC(10), dan);
 
  116            env(
pay(bob, alice, USDB(6)));
 
  117            env(
pay(alice, dan, USDC(5)),
 
  127            Env env(*
this, features);
 
  129            env.
fund(
XRP(10000), alice, bob, carol, dan);
 
  131            env.
trust(USDA(10), bob);
 
  132            env.
trust(USDB(10), alice, carol);
 
  133            env.
trust(USDC(10), dan);
 
  136            env(
pay(alice, dan, USDC(5)),
 
  146            Env env(*
this, features);
 
  148            env.
fund(
XRP(10000), alice, bob, carol, dan, erin);
 
  150            env.
trust(USDA(10), bob, carol);
 
  151            env.
trust(USDB(10), dan);
 
  152            env.
trust(USDC(10), alice, dan);
 
  153            env.
trust(USDD(20), erin);
 
  155            env(
rate(carol, 1.1));
 
  158            env(
pay(carol, alice, USDC(10)));
 
  159            env(
pay(alice, erin, USDD(5)),
 
  170            Env env(*
this, features);
 
  172            env.
fund(
XRP(10000), alice, bob, carol);
 
  174            env.
trust(USDA(10), bob);
 
  175            env.
trust(USDB(10), carol);
 
  177            env(
pay(alice, carol, USDB(5)),
 
  183            env(
pay(alice, carol, USDB(5)),
 
 
  196        auto const alice = 
Account(
"alice");
 
  197        auto const bob = 
Account(
"bob");
 
  198        auto const carol = 
Account(
"carol");
 
  199        auto const dan = 
Account(
"dan");
 
  200        auto const USDA = alice[
"USD"];
 
  201        auto const USDB = bob[
"USD"];
 
  202        auto const USDC = carol[
"USD"];
 
  203        auto const USDD = dan[
"USD"];
 
  206        for (
auto bobDanQIn : {80, 100, 120})
 
  207            for (
auto bobAliceQOut : {80, 100, 120})
 
  209                Env env(*
this, features);
 
  210                env.
fund(
XRP(10000), alice, bob, carol, dan);
 
  214                env(
trust(carol, USDA(100)));
 
  216                env(
pay(alice, bob, USDA(100)));
 
  218                env(
pay(dan, carol, USDA(10)),
 
  223                if (bobAliceQOut > bobDanQIn)
 
  226                        USDD(10.0 * 
double(bobAliceQOut) / 
double(bobDanQIn))));
 
  233        for (
auto carolAliceQIn : {80, 100, 120})
 
  235            Env env(*
this, features);
 
  236            env.
fund(
XRP(10000), alice, bob, carol);
 
  239            env(
trust(bob, USDA(10)));
 
  242            env(
pay(alice, bob, USDA(10)));
 
  244            env(
pay(bob, carol, USDA(5)), 
sendmax(USDA(10)));
 
  245            auto const effectiveQ =
 
  246                carolAliceQIn > 100 ? 1.0 : carolAliceQIn / 100.0;
 
  251        for (
auto bobAliceQOut : {80, 100, 120})
 
  253            Env env(*
this, features);
 
  254            env.
fund(
XRP(10000), alice, bob, carol);
 
  257            env(
trust(carol, USDA(10)));
 
  259            env(
pay(alice, bob, USDA(10)));
 
  261            env(
pay(bob, carol, USDA(5)), 
sendmax(USDA(5)));
 
 
  274        auto const gw = 
Account(
"gateway");
 
  275        auto const USD = gw[
"USD"];
 
  276        auto const BTC = gw[
"BTC"];
 
  277        auto const EUR = gw[
"EUR"];
 
  284            Env env(*
this, features);
 
  286            env.
fund(
XRP(10000), alice, bob, carol, gw);
 
  288            env.
trust(USD(1000), alice, bob, carol);
 
  289            env.
trust(BTC(1000), alice, bob, carol);
 
  291            env(
pay(gw, alice, BTC(50)));
 
  292            env(
pay(gw, bob, USD(50)));
 
  294            env(
offer(bob, BTC(50), USD(50)));
 
  302            BEAST_EXPECT(!
isOffer(env, bob, BTC(50), USD(50)));
 
  306            Env env(*
this, features);
 
  308            env.
fund(
XRP(10000), alice, bob, carol, gw);
 
  310            env.
trust(USD(1000), alice, bob, carol);
 
  311            env.
trust(BTC(1000), alice, bob, carol);
 
  313            env(
pay(gw, alice, BTC(50)));
 
  314            env(
pay(gw, bob, USD(50)));
 
  325            BEAST_EXPECT(!
isOffer(env, bob, 
XRP(50), USD(50)));
 
  326            BEAST_EXPECT(!
isOffer(env, bob, BTC(50), 
XRP(50)));
 
  330            Env env(*
this, features);
 
  332            env.
fund(
XRP(10000), alice, bob, carol, gw);
 
  334            env.
trust(USD(1000), alice, bob, carol);
 
  335            env.
trust(BTC(1000), alice, bob, carol);
 
  337            env(
pay(gw, bob, USD(50)));
 
  347            BEAST_EXPECT(!
isOffer(env, bob, 
XRP(50), USD(50)));
 
  351            Env env(*
this, features);
 
  353            env.
fund(
XRP(10000), alice, bob, carol, gw);
 
  355            env.
trust(USD(1000), alice, bob, carol);
 
  356            env.
trust(BTC(1000), alice, bob, carol);
 
  358            env(
pay(gw, alice, USD(50)));
 
  368            BEAST_EXPECT(!
isOffer(env, bob, USD(50), 
XRP(50)));
 
  372            Env env(*
this, features);
 
  374            env.
fund(
XRP(10000), alice, bob, carol, gw);
 
  376            env.
trust(USD(1000), alice, bob, carol);
 
  377            env.
trust(BTC(1000), alice, bob, carol);
 
  378            env.
trust(EUR(1000), alice, bob, carol);
 
  380            env(
pay(gw, alice, BTC(60)));
 
  381            env(
pay(gw, bob, USD(50)));
 
  382            env(
pay(gw, bob, EUR(50)));
 
  384            env(
offer(bob, BTC(50), USD(50)));
 
  385            env(
offer(bob, BTC(40), EUR(50)));
 
  386            env(
offer(bob, EUR(50), USD(50)));
 
  389            env(
pay(bob, gw, EUR(50)));
 
  390            BEAST_EXPECT(
isOffer(env, bob, BTC(50), USD(50)));
 
  391            BEAST_EXPECT(
isOffer(env, bob, BTC(40), EUR(50)));
 
  392            BEAST_EXPECT(
isOffer(env, bob, EUR(50), USD(50)));
 
  394            env(
pay(alice, carol, USD(50)),
 
  405            BEAST_EXPECT(!
isOffer(env, bob, BTC(50), USD(50)));
 
  407            BEAST_EXPECT(!
isOffer(env, bob, BTC(40), EUR(50)));
 
  409            BEAST_EXPECT(
isOffer(env, bob, EUR(50), USD(50)));
 
  420            Env env(*
this, features);
 
  422            env.
fund(
XRP(10000), alice, bob, carol, gw);
 
  424            env.
trust(USD(1000), alice, bob, carol);
 
  425            env.
trust(BTC(1000), alice, bob, carol);
 
  426            env.
trust(EUR(1000), alice, bob, carol);
 
  428            env(
pay(gw, alice, BTC(60)));
 
  429            env(
pay(gw, bob, USD(60)));
 
  430            env(
pay(gw, bob, EUR(50)));
 
  431            env(
pay(gw, carol, EUR(1)));
 
  433            env(
offer(bob, BTC(50), USD(50)));
 
  434            env(
offer(bob, BTC(60), EUR(50)));
 
  435            env(
offer(carol, BTC(1000), EUR(1)));
 
  436            env(
offer(bob, EUR(50), USD(50)));
 
  439            env(
pay(bob, gw, EUR(50)));
 
  440            BEAST_EXPECT(
isOffer(env, bob, BTC(50), USD(50)));
 
  441            BEAST_EXPECT(
isOffer(env, bob, BTC(60), EUR(50)));
 
  442            BEAST_EXPECT(
isOffer(env, carol, BTC(1000), EUR(1)));
 
  445            auto const flowResult = [&] {
 
  482            BEAST_EXPECT(flowResult.removableOffers.size() == 1);
 
  485                    if (flowResult.removableOffers.empty())
 
  488                    for (
auto const& o : flowResult.removableOffers)
 
  496            BEAST_EXPECT(
isOffer(env, bob, BTC(50), USD(50)));
 
  497            BEAST_EXPECT(
isOffer(env, carol, BTC(1000), EUR(1)));
 
  499            BEAST_EXPECT(!
isOffer(env, bob, BTC(60), EUR(50)));
 
  509            Env env(*
this, features);
 
  510            env.
fund(
XRP(10000), alice, bob, carol, gw);
 
  513            env.
trust(USD(1000), alice, bob, carol);
 
  514            env.
trust(EUR(1000), alice, bob, carol);
 
  516            env(
pay(gw, alice, USD(1000)));
 
  517            env(
pay(gw, bob, EUR(1000)));
 
  523            bool const reducedOffersV2 = features[fixReducedOffersV2];
 
  529            TER const expectedTER =
 
  531            env(
pay(alice, carol, EUR(1)),
 
  537            if (!reducedOffersV2)
 
  545                if (BEAST_EXPECT(usdOffer))
 
  551                            to_string(usdOffer->at(sfBookDirectory));
 
  552                        bookDirStr.
erase(0, 48);
 
  556                        usdOffer->at(sfTakerGets), usdOffer->at(sfTakerPays));
 
  562                    BEAST_EXPECT(actualRate > bookRate);