2#include <test/jtx/Account.h>
3#include <test/jtx/Env.h>
4#include <test/jtx/TestHelpers.h>
5#include <test/jtx/amount.h>
6#include <test/jtx/balance.h>
7#include <test/jtx/offer.h>
8#include <test/jtx/owners.h>
9#include <test/jtx/pay.h>
10#include <test/jtx/tags.h>
11#include <test/jtx/ter.h>
13#include <xrpl/beast/unit_test/suite.h>
14#include <xrpl/protocol/Feature.h>
15#include <xrpl/protocol/TER.h>
28 Env env(*
this, features);
30 auto const gw =
Account(
"gateway");
31 auto const usd = gw[
"USD"];
33 env.
fund(
XRP(100000000), gw,
"alice",
"bob",
"carol",
"dan");
34 env.
trust(usd(1),
"bob");
35 env(
pay(gw,
"bob", usd(1)));
36 env.
trust(usd(1),
"dan");
37 env(
pay(gw,
"dan", usd(1)));
43 env(
offer(
"alice", usd(1000),
XRP(1000)));
53 env(
offer(
"carol", usd(1000),
XRP(1000)));
68 Env env(*
this, features);
70 auto const gw =
Account(
"gateway");
71 auto const usd = gw[
"USD"];
74 int const maxConsumed = 1000;
76 env.
fund(
XRP(100000000), gw,
"alice",
"bob",
"carol");
77 int const bobOfferCount = maxConsumed + 150;
78 env.
trust(usd(bobOfferCount),
"bob");
79 env(
pay(gw,
"bob", usd(bobOfferCount)));
81 nOffers(env, bobOfferCount,
"bob",
XRP(1), usd(1));
85 env(
offer(
"alice", usd(bobOfferCount),
XRP(bobOfferCount)));
93 env(
offer(
"carol", usd(1000),
XRP(1000)));
103 testcase(
"Step And Crossing Limit");
106 Env env(*
this, features);
108 auto const gw =
Account(
"gateway");
109 auto const usd = gw[
"USD"];
111 env.
fund(
XRP(100000000), gw,
"alice",
"bob",
"carol",
"dan",
"evita");
114 int const maxConsumed = 1000;
116 int const evitaOfferCount{maxConsumed + 49};
117 env.
trust(usd(1000),
"alice");
118 env(
pay(gw,
"alice", usd(1000)));
119 env.
trust(usd(1000),
"carol");
120 env(
pay(gw,
"carol", usd(1)));
121 env.
trust(usd(evitaOfferCount + 1),
"evita");
122 env(
pay(gw,
"evita", usd(evitaOfferCount + 1)));
125 int const carolsOfferCount{700};
127 nOffers(env, carolsOfferCount,
"carol",
XRP(1), usd(1));
128 nOffers(env, evitaOfferCount,
"evita",
XRP(1), usd(1));
133 env(
offer(
"bob", usd(1000),
XRP(1000)));
145 env(
offer(
"dan", usd(maxConsumed + 50),
XRP(maxConsumed + 50)));
171 auto const gw =
Account(
"gateway");
172 auto const alice =
Account(
"alice");
173 auto const bob =
Account(
"bob");
174 auto const carol =
Account(
"carol");
176 auto const usd = gw[
"USD"];
177 auto const eur = gw[
"EUR"];
191 Env env(*
this, features);
193 env.
fund(
XRP(100000000), gw, alice, bob, carol);
195 env.
trust(usd(4000), alice);
196 env(
pay(gw, alice, usd(4000)));
197 env.
trust(usd(1000), carol);
198 env(
pay(gw, carol, usd(3)));
207 nOffers(env, 1, alice, eur(500), usd(500));
247 env.
trust(eur(10000), bob);
249 env(
pay(gw, bob, eur(2000)));
251 env(
offer(bob, usd(4000), eur(4000)));
261 auto const numAOffers = 2000 + 100 + 1000 + 1 - ((2 * 100) + (2 * 199) + 1 + 1);
268 Env env(*
this, features);
270 env.
fund(
XRP(100000000), gw, alice, bob, carol);
272 env.
trust(usd(4000), alice);
273 env(
pay(gw, alice, usd(4000)));
274 env.
trust(usd(1000), carol);
275 env(
pay(gw, carol, usd(3)));
279 nOffers(env, 1, alice, eur(1), usd(10));
285 nOffers(env, 1, alice, eur(499), usd(499));
318 env.
trust(eur(10000), bob);
320 env(
pay(gw, bob, eur(2000)));
322 env(
offer(bob, usd(4000), eur(4000)));
332 auto const numAOffers = 1 + 2000 + 100 + 1000 + 1 - (1 + (2 * 100) + (2 * 199) + 1 + 1);
347 auto const gw =
Account(
"gateway");
348 auto const alice =
Account(
"alice");
349 auto const bob =
Account(
"bob");
351 auto const usd = gw[
"USD"];
353 Env env(*
this, features);
355 env.
fund(
XRP(100000000), gw, alice, bob);
357 env.
trust(usd(8000), alice);
358 env.
trust(usd(8000), bob);
361 env(
pay(gw, alice, usd(8000)));
405 testAll(sa - featurePermissionedDEX);
TestcaseT testcase
Memberspace for declaring test cases.
void run() override
Runs the suite.
void testStepAndCrossingLimit(FeatureBitset features)
void testOfferOverflow(FeatureBitset features)
void testAutoBridgedLimits(FeatureBitset features)
void testStepLimit(FeatureBitset features)
void testCrossingLimit(FeatureBitset features)
A transaction testing environment.
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
void trust(STAmount const &amount, Account const &account)
Establish trust lines.
void require(Args const &... args)
Check a set of requirements.
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.
void nOffers(Env &env, std::size_t n, Account const &account, STAmount const &in, STAmount const &out)
json::Value pay(AccountID const &account, AccountID const &to, AnyAmount amount)
Create a payment.
XrpT const XRP
Converts to XRP Issue or STAmount.
FeatureBitset testableAmendments()
json::Value offer(Account const &account, STAmount const &takerPays, STAmount const &takerGets, std::uint32_t flags)
Create an offer.
OwnerCount< ltOFFER > offers
Match the number of offers in the account's owner directory.
BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(CrossingLimits, app, xrpl, 10)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.