mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Maintenance of Offer and PayStrand unit tests
This commit is contained in:
committed by
manojsdoshi
parent
09ae9168ca
commit
22cc9a254a
@@ -2367,389 +2367,50 @@ public:
|
|||||||
int owners; // Owners on account
|
int owners; // Owners on account
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
TestData const tests[]{
|
TestData const tests[]{
|
||||||
// acct fundXrp bookAmt preTrust
|
// acct fundXrp bookAmt preTrust offerAmt tec spentXrp balanceUSD offers owners
|
||||||
// offerAmt tec spentXrp balanceUSD
|
{"ann", reserve(env, 0) + 0 * f, 1, noPreTrust, 1000, tecUNFUNDED_OFFER, f, USD( 0), 0, 0}, // Account is at the reserve, and will dip below once fees are subtracted.
|
||||||
// offers owners
|
{"bev", reserve(env, 0) + 1 * f, 1, noPreTrust, 1000, tecUNFUNDED_OFFER, f, USD( 0), 0, 0}, // Account has just enough for the reserve and the fee.
|
||||||
{"ann",
|
{"cam", reserve(env, 0) + 2 * f, 0, noPreTrust, 1000, tecINSUF_RESERVE_OFFER, f, USD( 0), 0, 0}, // Account has enough for the reserve, the fee and the offer, and a bit more, but not enough for the reserve after the offer is placed.
|
||||||
reserve(env, 0) + 0 * f,
|
{"deb", reserve(env, 0) + 2 * f, 1, noPreTrust, 1000, tesSUCCESS, 2 * f, USD(0.00001), 0, 1}, // Account has enough to buy a little USD then the offer runs dry.
|
||||||
1,
|
{"eve", reserve(env, 1) + 0 * f, 0, noPreTrust, 1000, tesSUCCESS, f, USD( 0), 1, 1}, // No offer to cross
|
||||||
noPreTrust,
|
{"flo", reserve(env, 1) + 0 * f, 1, noPreTrust, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 0, 1},
|
||||||
1000,
|
{"gay", reserve(env, 1) + 1 * f, 1000, noPreTrust, 1000, tesSUCCESS, XRP( 50) + f, USD( 50), 0, 1},
|
||||||
tecUNFUNDED_OFFER,
|
{"hye", XRP(1000) + 1 * f, 1000, noPreTrust, 1000, tesSUCCESS, XRP( 800) + f, USD( 800), 0, 1},
|
||||||
f,
|
{"ivy", XRP( 1) + reserve(env, 1) + 1 * f, 1, noPreTrust, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 0, 1},
|
||||||
USD(0),
|
{"joy", XRP( 1) + reserve(env, 2) + 1 * f, 1, noPreTrust, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 1, 2},
|
||||||
0,
|
{"kim", XRP( 900) + reserve(env, 2) + 1 * f, 999, noPreTrust, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 0, 1},
|
||||||
0}, // Account is at the reserve, and will dip below once fees are
|
{"liz", XRP( 998) + reserve(env, 0) + 1 * f, 999, noPreTrust, 1000, tesSUCCESS, XRP( 998) + f, USD( 998), 0, 1},
|
||||||
// subtracted.
|
{"meg", XRP( 998) + reserve(env, 1) + 1 * f, 999, noPreTrust, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 0, 1},
|
||||||
{"bev",
|
{"nia", XRP( 998) + reserve(env, 2) + 1 * f, 999, noPreTrust, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 1, 2},
|
||||||
reserve(env, 0) + 1 * f,
|
{"ova", XRP( 999) + reserve(env, 0) + 1 * f, 1000, noPreTrust, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 0, 1},
|
||||||
1,
|
{"pam", XRP( 999) + reserve(env, 1) + 1 * f, 1000, noPreTrust, 1000, tesSUCCESS, XRP(1000) + f, USD( 1000), 0, 1},
|
||||||
noPreTrust,
|
{"rae", XRP( 999) + reserve(env, 2) + 1 * f, 1000, noPreTrust, 1000, tesSUCCESS, XRP(1000) + f, USD( 1000), 0, 1},
|
||||||
1000,
|
{"sue", XRP(1000) + reserve(env, 2) + 1 * f, 0, noPreTrust, 1000, tesSUCCESS, f, USD( 0), 1, 1},
|
||||||
tecUNFUNDED_OFFER,
|
//---------------- Pre-established trust lines ---------------------
|
||||||
f,
|
{"abe", reserve(env, 0) + 0 * f, 1, gwPreTrust, 1000, tecUNFUNDED_OFFER, f, USD( 0), 0, 0},
|
||||||
USD(0),
|
{"bud", reserve(env, 0) + 1 * f, 1, gwPreTrust, 1000, tecUNFUNDED_OFFER, f, USD( 0), 0, 0},
|
||||||
0,
|
{"che", reserve(env, 0) + 2 * f, 0, gwPreTrust, 1000, tecINSUF_RESERVE_OFFER, f, USD( 0), 0, 0},
|
||||||
0}, // Account has just enough for the reserve and the fee.
|
{"dan", reserve(env, 0) + 2 * f, 1, gwPreTrust, 1000, tesSUCCESS, 2 * f, USD(0.00001), 0, 0},
|
||||||
{"cam",
|
{"eli", XRP( 20) + reserve(env, 0) + 1 * f, 1000, gwPreTrust, 1000, tesSUCCESS, XRP(20) + 1 * f, USD( 20), 0, 0},
|
||||||
reserve(env, 0) + 2 * f,
|
{"fyn", reserve(env, 1) + 0 * f, 0, gwPreTrust, 1000, tesSUCCESS, f, USD( 0), 1, 1},
|
||||||
0,
|
{"gar", reserve(env, 1) + 0 * f, 1, gwPreTrust, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 1, 1},
|
||||||
noPreTrust,
|
{"hal", reserve(env, 1) + 1 * f, 1, gwPreTrust, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 1, 1},
|
||||||
1000,
|
|
||||||
tecINSUF_RESERVE_OFFER,
|
|
||||||
f,
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
0}, // Account has enough for the reserve, the fee and the offer,
|
|
||||||
// and a bit more, but not enough for the reserve after the
|
|
||||||
// offer is placed.
|
|
||||||
{"deb",
|
|
||||||
reserve(env, 0) + 2 * f,
|
|
||||||
1,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
2 * f,
|
|
||||||
USD(0.00001),
|
|
||||||
0,
|
|
||||||
1}, // Account has enough to buy a little USD then the offer runs
|
|
||||||
// dry.
|
|
||||||
{"eve",
|
|
||||||
reserve(env, 1) + 0 * f,
|
|
||||||
0,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
f,
|
|
||||||
USD(0),
|
|
||||||
1,
|
|
||||||
1}, // No offer to cross
|
|
||||||
{"flo",
|
|
||||||
reserve(env, 1) + 0 * f,
|
|
||||||
1,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(1) + f,
|
|
||||||
USD(1),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"gay",
|
|
||||||
reserve(env, 1) + 1 * f,
|
|
||||||
1000,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(50) + f,
|
|
||||||
USD(50),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"hye",
|
|
||||||
XRP(1000) + 1 * f,
|
|
||||||
1000,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(800) + f,
|
|
||||||
USD(800),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"ivy",
|
|
||||||
XRP(1) + reserve(env, 1) + 1 * f,
|
|
||||||
1,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(1) + f,
|
|
||||||
USD(1),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"joy",
|
|
||||||
XRP(1) + reserve(env, 2) + 1 * f,
|
|
||||||
1,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(1) + f,
|
|
||||||
USD(1),
|
|
||||||
1,
|
|
||||||
2},
|
|
||||||
{"kim",
|
|
||||||
XRP(900) + reserve(env, 2) + 1 * f,
|
|
||||||
999,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(999) + f,
|
|
||||||
USD(999),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"liz",
|
|
||||||
XRP(998) + reserve(env, 0) + 1 * f,
|
|
||||||
999,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(998) + f,
|
|
||||||
USD(998),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"meg",
|
|
||||||
XRP(998) + reserve(env, 1) + 1 * f,
|
|
||||||
999,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(999) + f,
|
|
||||||
USD(999),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"nia",
|
|
||||||
XRP(998) + reserve(env, 2) + 1 * f,
|
|
||||||
999,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(999) + f,
|
|
||||||
USD(999),
|
|
||||||
1,
|
|
||||||
2},
|
|
||||||
{"ova",
|
|
||||||
XRP(999) + reserve(env, 0) + 1 * f,
|
|
||||||
1000,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(999) + f,
|
|
||||||
USD(999),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"pam",
|
|
||||||
XRP(999) + reserve(env, 1) + 1 * f,
|
|
||||||
1000,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(1000) + f,
|
|
||||||
USD(1000),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"rae",
|
|
||||||
XRP(999) + reserve(env, 2) + 1 * f,
|
|
||||||
1000,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(1000) + f,
|
|
||||||
USD(1000),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"sue",
|
|
||||||
XRP(1000) + reserve(env, 2) + 1 * f,
|
|
||||||
0,
|
|
||||||
noPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
f,
|
|
||||||
USD(0),
|
|
||||||
1,
|
|
||||||
1},
|
|
||||||
|
|
||||||
//---------------------Pre-established trust lines
|
{"ned", reserve(env, 1) + 0 * f, 1, acctPreTrust, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1},
|
||||||
//-----------------------------
|
{"ole", reserve(env, 1) + 1 * f, 1, acctPreTrust, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1},
|
||||||
{"abe",
|
{"pat", reserve(env, 1) + 2 * f, 0, acctPreTrust, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1},
|
||||||
reserve(env, 0) + 0 * f,
|
{"quy", reserve(env, 1) + 2 * f, 1, acctPreTrust, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1},
|
||||||
1,
|
{"ron", reserve(env, 1) + 3 * f, 0, acctPreTrust, 1000, tecINSUF_RESERVE_OFFER, 2 * f, USD( 0), 0, 1},
|
||||||
gwPreTrust,
|
{"syd", reserve(env, 1) + 3 * f, 1, acctPreTrust, 1000, tesSUCCESS, 3 * f, USD(0.00001), 0, 1},
|
||||||
1000,
|
{"ted", XRP( 20) + reserve(env, 1) + 2 * f, 1000, acctPreTrust, 1000, tesSUCCESS, XRP(20) + 2 * f, USD( 20), 0, 1},
|
||||||
tecUNFUNDED_OFFER,
|
{"uli", reserve(env, 2) + 0 * f, 0, acctPreTrust, 1000, tecINSUF_RESERVE_OFFER, 2 * f, USD( 0), 0, 1},
|
||||||
f,
|
{"vic", reserve(env, 2) + 0 * f, 1, acctPreTrust, 1000, tesSUCCESS, XRP( 1) + 2 * f, USD( 1), 0, 1},
|
||||||
USD(0),
|
{"wes", reserve(env, 2) + 1 * f, 0, acctPreTrust, 1000, tesSUCCESS, 2 * f, USD( 0), 1, 2},
|
||||||
0,
|
{"xan", reserve(env, 2) + 1 * f, 1, acctPreTrust, 1000, tesSUCCESS, XRP( 1) + 2 * f, USD( 1), 1, 2},
|
||||||
0},
|
|
||||||
{"bud",
|
|
||||||
reserve(env, 0) + 1 * f,
|
|
||||||
1,
|
|
||||||
gwPreTrust,
|
|
||||||
1000,
|
|
||||||
tecUNFUNDED_OFFER,
|
|
||||||
f,
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
0},
|
|
||||||
{"che",
|
|
||||||
reserve(env, 0) + 2 * f,
|
|
||||||
0,
|
|
||||||
gwPreTrust,
|
|
||||||
1000,
|
|
||||||
tecINSUF_RESERVE_OFFER,
|
|
||||||
f,
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
0},
|
|
||||||
{"dan",
|
|
||||||
reserve(env, 0) + 2 * f,
|
|
||||||
1,
|
|
||||||
gwPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
2 * f,
|
|
||||||
USD(0.00001),
|
|
||||||
0,
|
|
||||||
0},
|
|
||||||
{"eli",
|
|
||||||
XRP(20) + reserve(env, 0) + 1 * f,
|
|
||||||
1000,
|
|
||||||
gwPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(20) + 1 * f,
|
|
||||||
USD(20),
|
|
||||||
0,
|
|
||||||
0},
|
|
||||||
{"fyn",
|
|
||||||
reserve(env, 1) + 0 * f,
|
|
||||||
0,
|
|
||||||
gwPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
f,
|
|
||||||
USD(0),
|
|
||||||
1,
|
|
||||||
1},
|
|
||||||
{"gar",
|
|
||||||
reserve(env, 1) + 0 * f,
|
|
||||||
1,
|
|
||||||
gwPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(1) + f,
|
|
||||||
USD(1),
|
|
||||||
1,
|
|
||||||
1},
|
|
||||||
{"hal",
|
|
||||||
reserve(env, 1) + 1 * f,
|
|
||||||
1,
|
|
||||||
gwPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(1) + f,
|
|
||||||
USD(1),
|
|
||||||
1,
|
|
||||||
1},
|
|
||||||
|
|
||||||
{"ned",
|
|
||||||
reserve(env, 1) + 0 * f,
|
|
||||||
1,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tecUNFUNDED_OFFER,
|
|
||||||
2 * f,
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"ole",
|
|
||||||
reserve(env, 1) + 1 * f,
|
|
||||||
1,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tecUNFUNDED_OFFER,
|
|
||||||
2 * f,
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"pat",
|
|
||||||
reserve(env, 1) + 2 * f,
|
|
||||||
0,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tecUNFUNDED_OFFER,
|
|
||||||
2 * f,
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"quy",
|
|
||||||
reserve(env, 1) + 2 * f,
|
|
||||||
1,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tecUNFUNDED_OFFER,
|
|
||||||
2 * f,
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"ron",
|
|
||||||
reserve(env, 1) + 3 * f,
|
|
||||||
0,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tecINSUF_RESERVE_OFFER,
|
|
||||||
2 * f,
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"syd",
|
|
||||||
reserve(env, 1) + 3 * f,
|
|
||||||
1,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
3 * f,
|
|
||||||
USD(0.00001),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"ted",
|
|
||||||
XRP(20) + reserve(env, 1) + 2 * f,
|
|
||||||
1000,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(20) + 2 * f,
|
|
||||||
USD(20),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"uli",
|
|
||||||
reserve(env, 2) + 0 * f,
|
|
||||||
0,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tecINSUF_RESERVE_OFFER,
|
|
||||||
2 * f,
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"vic",
|
|
||||||
reserve(env, 2) + 0 * f,
|
|
||||||
1,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(1) + 2 * f,
|
|
||||||
USD(1),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"wes",
|
|
||||||
reserve(env, 2) + 1 * f,
|
|
||||||
0,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
2 * f,
|
|
||||||
USD(0),
|
|
||||||
1,
|
|
||||||
2},
|
|
||||||
{"xan",
|
|
||||||
reserve(env, 2) + 1 * f,
|
|
||||||
1,
|
|
||||||
acctPreTrust,
|
|
||||||
1000,
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(1) + 2 * f,
|
|
||||||
USD(1),
|
|
||||||
1,
|
|
||||||
2},
|
|
||||||
};
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
for (auto const& t : tests)
|
for (auto const& t : tests)
|
||||||
{
|
{
|
||||||
@@ -3226,203 +2887,29 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
TestData const tests[]{
|
TestData const tests[]{
|
||||||
// acct pays XRP
|
// acct pays XRP
|
||||||
// acct fundXrp fundUSD gwGets gwPays
|
// acct fundXrp fundUSD gwGets gwPays acctGets acctPays tec spentXrp finalUSD offers owners takerGets takerPays
|
||||||
// acctGets acctPays tec spentXrp
|
{"ann", XRP(10) + reserve(env, 0) + 1 * f, USD( 0), XRP(10), USD( 5), USD(10), XRP(10), tecINSUF_RESERVE_OFFER, XRP( 0) + (1 * f), USD( 0), 0, 0},
|
||||||
// finalUSD offers owners takerGets takerPays
|
{"bev", XRP(10) + reserve(env, 1) + 1 * f, USD( 0), XRP(10), USD( 5), USD(10), XRP(10), tesSUCCESS, XRP( 0) + (1 * f), USD( 0), 1, 1, XRP(10), USD(10)},
|
||||||
{"ann",
|
{"cam", XRP(10) + reserve(env, 0) + 1 * f, USD( 0), XRP(10), USD(10), USD(10), XRP(10), tesSUCCESS, XRP( 10) + (1 * f), USD(10), 0, 1},
|
||||||
XRP(10) + reserve(env, 0) + 1 * f,
|
{"deb", XRP(10) + reserve(env, 0) + 1 * f, USD( 0), XRP(10), USD(20), USD(10), XRP(10), tesSUCCESS, XRP( 10) + (1 * f), USD(20), 0, 1},
|
||||||
USD(0),
|
{"eve", XRP(10) + reserve(env, 0) + 1 * f, USD( 0), XRP(10), USD(20), USD( 5), XRP( 5), tesSUCCESS, XRP( 5) + (1 * f), USD(10), 0, 1},
|
||||||
XRP(10),
|
{"flo", XRP(10) + reserve(env, 0) + 1 * f, USD( 0), XRP(10), USD(20), USD(20), XRP(20), tesSUCCESS, XRP( 10) + (1 * f), USD(20), 0, 1},
|
||||||
USD(5),
|
{"gay", XRP(20) + reserve(env, 1) + 1 * f, USD( 0), XRP(10), USD(20), USD(20), XRP(20), tesSUCCESS, XRP( 10) + (1 * f), USD(20), 0, 1},
|
||||||
USD(10),
|
{"hye", XRP(20) + reserve(env, 2) + 1 * f, USD( 0), XRP(10), USD(20), USD(20), XRP(20), tesSUCCESS, XRP( 10) + (1 * f), USD(20), 1, 2, XRP(10), USD(10)},
|
||||||
XRP(10),
|
|
||||||
tecINSUF_RESERVE_OFFER,
|
|
||||||
XRP(0) + (1 * f),
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
0},
|
|
||||||
{"bev",
|
|
||||||
XRP(10) + reserve(env, 1) + 1 * f,
|
|
||||||
USD(0),
|
|
||||||
XRP(10),
|
|
||||||
USD(5),
|
|
||||||
USD(10),
|
|
||||||
XRP(10),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(0) + (1 * f),
|
|
||||||
USD(0),
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
XRP(10),
|
|
||||||
USD(10)},
|
|
||||||
{"cam",
|
|
||||||
XRP(10) + reserve(env, 0) + 1 * f,
|
|
||||||
USD(0),
|
|
||||||
XRP(10),
|
|
||||||
USD(10),
|
|
||||||
USD(10),
|
|
||||||
XRP(10),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(10) + (1 * f),
|
|
||||||
USD(10),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"deb",
|
|
||||||
XRP(10) + reserve(env, 0) + 1 * f,
|
|
||||||
USD(0),
|
|
||||||
XRP(10),
|
|
||||||
USD(20),
|
|
||||||
USD(10),
|
|
||||||
XRP(10),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(10) + (1 * f),
|
|
||||||
USD(20),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"eve",
|
|
||||||
XRP(10) + reserve(env, 0) + 1 * f,
|
|
||||||
USD(0),
|
|
||||||
XRP(10),
|
|
||||||
USD(20),
|
|
||||||
USD(5),
|
|
||||||
XRP(5),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(5) + (1 * f),
|
|
||||||
USD(10),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"flo",
|
|
||||||
XRP(10) + reserve(env, 0) + 1 * f,
|
|
||||||
USD(0),
|
|
||||||
XRP(10),
|
|
||||||
USD(20),
|
|
||||||
USD(20),
|
|
||||||
XRP(20),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(10) + (1 * f),
|
|
||||||
USD(20),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"gay",
|
|
||||||
XRP(20) + reserve(env, 1) + 1 * f,
|
|
||||||
USD(0),
|
|
||||||
XRP(10),
|
|
||||||
USD(20),
|
|
||||||
USD(20),
|
|
||||||
XRP(20),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(10) + (1 * f),
|
|
||||||
USD(20),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"hye",
|
|
||||||
XRP(20) + reserve(env, 2) + 1 * f,
|
|
||||||
USD(0),
|
|
||||||
XRP(10),
|
|
||||||
USD(20),
|
|
||||||
USD(20),
|
|
||||||
XRP(20),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(10) + (1 * f),
|
|
||||||
USD(20),
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
XRP(10),
|
|
||||||
USD(10)},
|
|
||||||
// acct pays USD
|
// acct pays USD
|
||||||
{"meg",
|
{"meg", reserve(env, 1) + 2 * f, USD(10), USD(10), XRP( 5), XRP(10), USD(10), tecINSUF_RESERVE_OFFER, XRP( 0) + (2 * f), USD(10), 0, 1},
|
||||||
reserve(env, 1) + 2 * f,
|
{"nia", reserve(env, 2) + 2 * f, USD(10), USD(10), XRP( 5), XRP(10), USD(10), tesSUCCESS, XRP( 0) + (2 * f), USD(10), 1, 2, USD(10), XRP(10)},
|
||||||
USD(10),
|
{"ova", reserve(env, 1) + 2 * f, USD(10), USD(10), XRP(10), XRP(10), USD(10), tesSUCCESS, XRP(-10) + (2 * f), USD( 0), 0, 1},
|
||||||
USD(10),
|
{"pam", reserve(env, 1) + 2 * f, USD(10), USD(10), XRP(20), XRP(10), USD(10), tesSUCCESS, XRP(-20) + (2 * f), USD( 0), 0, 1},
|
||||||
XRP(5),
|
{"qui", reserve(env, 1) + 2 * f, USD(10), USD(20), XRP(40), XRP(10), USD(10), tesSUCCESS, XRP(-20) + (2 * f), USD( 0), 0, 1},
|
||||||
XRP(10),
|
{"rae", reserve(env, 2) + 2 * f, USD(10), USD( 5), XRP( 5), XRP(10), USD(10), tesSUCCESS, XRP( -5) + (2 * f), USD( 5), 1, 2, USD( 5), XRP( 5)},
|
||||||
USD(10),
|
{"sue", reserve(env, 2) + 2 * f, USD(10), USD( 5), XRP(10), XRP(10), USD(10), tesSUCCESS, XRP(-10) + (2 * f), USD( 5), 1, 2, USD( 5), XRP( 5)},
|
||||||
tecINSUF_RESERVE_OFFER,
|
|
||||||
XRP(0) + (2 * f),
|
|
||||||
USD(10),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"nia",
|
|
||||||
reserve(env, 2) + 2 * f,
|
|
||||||
USD(10),
|
|
||||||
USD(10),
|
|
||||||
XRP(5),
|
|
||||||
XRP(10),
|
|
||||||
USD(10),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(0) + (2 * f),
|
|
||||||
USD(10),
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
USD(10),
|
|
||||||
XRP(10)},
|
|
||||||
{"ova",
|
|
||||||
reserve(env, 1) + 2 * f,
|
|
||||||
USD(10),
|
|
||||||
USD(10),
|
|
||||||
XRP(10),
|
|
||||||
XRP(10),
|
|
||||||
USD(10),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(-10) + (2 * f),
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"pam",
|
|
||||||
reserve(env, 1) + 2 * f,
|
|
||||||
USD(10),
|
|
||||||
USD(10),
|
|
||||||
XRP(20),
|
|
||||||
XRP(10),
|
|
||||||
USD(10),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(-20) + (2 * f),
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"qui",
|
|
||||||
reserve(env, 1) + 2 * f,
|
|
||||||
USD(10),
|
|
||||||
USD(20),
|
|
||||||
XRP(40),
|
|
||||||
XRP(10),
|
|
||||||
USD(10),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(-20) + (2 * f),
|
|
||||||
USD(0),
|
|
||||||
0,
|
|
||||||
1},
|
|
||||||
{"rae",
|
|
||||||
reserve(env, 2) + 2 * f,
|
|
||||||
USD(10),
|
|
||||||
USD(5),
|
|
||||||
XRP(5),
|
|
||||||
XRP(10),
|
|
||||||
USD(10),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(-5) + (2 * f),
|
|
||||||
USD(5),
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
USD(5),
|
|
||||||
XRP(5)},
|
|
||||||
{"sue",
|
|
||||||
reserve(env, 2) + 2 * f,
|
|
||||||
USD(10),
|
|
||||||
USD(5),
|
|
||||||
XRP(10),
|
|
||||||
XRP(10),
|
|
||||||
USD(10),
|
|
||||||
tesSUCCESS,
|
|
||||||
XRP(-10) + (2 * f),
|
|
||||||
USD(5),
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
USD(5),
|
|
||||||
XRP(5)},
|
|
||||||
};
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
auto const zeroUsd = USD(0);
|
auto const zeroUsd = USD(0);
|
||||||
for (auto const& t : tests)
|
for (auto const& t : tests)
|
||||||
{
|
{
|
||||||
@@ -3976,46 +3463,17 @@ public:
|
|||||||
TER secondOfferTec; // tec code on second offer
|
TER secondOfferTec; // tec code on second offer
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
TestData const tests[]{
|
TestData const tests[]{
|
||||||
// acct fundXRP fundUSD fundEUR firstOfferTec
|
// acct fundXRP fundUSD fundEUR firstOfferTec secondOfferTec
|
||||||
// secondOfferTec
|
{"ann", reserve(env, 3) + f * 4, USD(1000), EUR(1000), tesSUCCESS, tesSUCCESS},
|
||||||
{"ann",
|
{"bev", reserve(env, 3) + f * 4, USD( 1), EUR(1000), tesSUCCESS, tesSUCCESS},
|
||||||
reserve(env, 3) + f * 4,
|
{"cam", reserve(env, 3) + f * 4, USD(1000), EUR( 1), tesSUCCESS, tesSUCCESS},
|
||||||
USD(1000),
|
{"deb", reserve(env, 3) + f * 4, USD( 0), EUR( 1), tesSUCCESS, tecUNFUNDED_OFFER},
|
||||||
EUR(1000),
|
{"eve", reserve(env, 3) + f * 4, USD( 1), EUR( 0), tecUNFUNDED_OFFER, tesSUCCESS},
|
||||||
tesSUCCESS,
|
{"flo", reserve(env, 3) + 0, USD(1000), EUR(1000), tecINSUF_RESERVE_OFFER, tecINSUF_RESERVE_OFFER},
|
||||||
tesSUCCESS},
|
|
||||||
{"bev",
|
|
||||||
reserve(env, 3) + f * 4,
|
|
||||||
USD(1),
|
|
||||||
EUR(1000),
|
|
||||||
tesSUCCESS,
|
|
||||||
tesSUCCESS},
|
|
||||||
{"cam",
|
|
||||||
reserve(env, 3) + f * 4,
|
|
||||||
USD(1000),
|
|
||||||
EUR(1),
|
|
||||||
tesSUCCESS,
|
|
||||||
tesSUCCESS},
|
|
||||||
{"deb",
|
|
||||||
reserve(env, 3) + f * 4,
|
|
||||||
USD(0),
|
|
||||||
EUR(1),
|
|
||||||
tesSUCCESS,
|
|
||||||
tecUNFUNDED_OFFER},
|
|
||||||
{"eve",
|
|
||||||
reserve(env, 3) + f * 4,
|
|
||||||
USD(1),
|
|
||||||
EUR(0),
|
|
||||||
tecUNFUNDED_OFFER,
|
|
||||||
tesSUCCESS},
|
|
||||||
{"flo",
|
|
||||||
reserve(env, 3) + 0,
|
|
||||||
USD(1000),
|
|
||||||
EUR(1000),
|
|
||||||
tecINSUF_RESERVE_OFFER,
|
|
||||||
tecINSUF_RESERVE_OFFER},
|
|
||||||
};
|
};
|
||||||
|
//clang-format on
|
||||||
|
|
||||||
for (auto const& t : tests)
|
for (auto const& t : tests)
|
||||||
{
|
{
|
||||||
@@ -4592,47 +4050,15 @@ public:
|
|||||||
std::vector<Actor> actors;
|
std::vector<Actor> actors;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
TestData const tests[]{
|
TestData const tests[]{
|
||||||
// btcStart --------------------- actor[0]
|
// btcStart --------------------- actor[0] --------------------- -------------------- actor[1] -------------------
|
||||||
// --------------------- -------------------- actor[1]
|
{0, 0, 1, BTC(20), {{"ann", 0, drops(3899999999960), BTC(20.0), USD(3000)}, {"abe", 0, drops(4099999999970), BTC( 0), USD(750)}}}, // no BTC xfer fee
|
||||||
// -------------------
|
{0, 1, 0, BTC(20), {{"bev", 0, drops(4099999999960), BTC( 7.5), USD(2000)}, {"bob", 0, drops(3899999999970), BTC(10), USD( 0)}}}, // no USD xfer fee
|
||||||
{0,
|
{0, 0, 0, BTC(20), {{"cam", 0, drops(3999999999950), BTC(20.0), USD(2000)} }}, // no xfer fee
|
||||||
0,
|
{0, 1, 0, BTC( 5), {{"deb", 1, drops(4039999999960), BTC( 0.0), USD(2000)}, {"dan", 1, drops(3959999999970), BTC( 4), USD( 0)}}}, // no USD xfer fee
|
||||||
1,
|
|
||||||
BTC(20),
|
|
||||||
{{"ann", 0, drops(3899999999960), BTC(20.0), USD(3000)},
|
|
||||||
{"abe", 0, drops(4099999999970), BTC(0), USD(750)}}}, // no BTC
|
|
||||||
// xfer fee
|
|
||||||
{0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
BTC(20),
|
|
||||||
{{"bev", 0, drops(4099999999960), BTC(7.5), USD(2000)},
|
|
||||||
{"bob", 0, drops(3899999999970), BTC(10), USD(0)}}}, // no USD
|
|
||||||
// xfer fee
|
|
||||||
{0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
BTC(20),
|
|
||||||
{{"cam",
|
|
||||||
0,
|
|
||||||
drops(3999999999950),
|
|
||||||
BTC(20.0),
|
|
||||||
USD(2000)}}}, // no xfer fee
|
|
||||||
// { 0, 0, 1, BTC( 5), { {"deb", 0, drops(3899999999960), BTC( 5.0),
|
|
||||||
// USD(3000)}, {"dan", 0, drops(4099999999970), BTC( 0), USD(750)} }
|
|
||||||
// }, // no BTC xfer fee
|
|
||||||
{0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
BTC(5),
|
|
||||||
{{"eve", 1, drops(4039999999960), BTC(0.0), USD(2000)},
|
|
||||||
{"eli", 1, drops(3959999999970), BTC(4), USD(0)}}}, // no USD
|
|
||||||
// xfer fee
|
|
||||||
// { 0, 0, 0, BTC( 5), { {"flo", 0, drops(3999999999950), BTC( 5.0),
|
|
||||||
// USD(2000)} }
|
|
||||||
// } // no xfer fee
|
|
||||||
};
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
for (auto const& t : tests)
|
for (auto const& t : tests)
|
||||||
{
|
{
|
||||||
@@ -4774,46 +4200,19 @@ public:
|
|||||||
std::vector<Actor> actors;
|
std::vector<Actor> actors;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
TestData const takerTests[]{
|
TestData const takerTests[]{
|
||||||
// btcStart ------------------- actor[0]
|
// btcStart ------------------- actor[0] -------------------- ------------------- actor[1] --------------------
|
||||||
// -------------------- ------------------- actor[1]
|
{0, 0, 1, BTC(5), {{"deb", 0, drops(3899999999960), BTC(5), USD(3000)}, {"dan", 0, drops(4099999999970), BTC(0), USD(750)}}}, // no BTC xfer fee
|
||||||
// --------------------
|
{0, 0, 0, BTC(5), {{"flo", 0, drops(3999999999950), BTC(5), USD(2000)} }} // no xfer fee
|
||||||
{0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
BTC(5),
|
|
||||||
{{"deb", 0, drops(3899999999960), BTC(5), USD(3000)},
|
|
||||||
{"dan", 0, drops(4099999999970), BTC(0), USD(750)}}}, // no BTC
|
|
||||||
// xfer fee
|
|
||||||
{0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
BTC(5),
|
|
||||||
{{"flo", 0, drops(3999999999950), BTC(5), USD(2000)}}} // no xfer
|
|
||||||
// fee
|
|
||||||
};
|
};
|
||||||
|
|
||||||
TestData const flowTests[]{
|
TestData const flowTests[]{
|
||||||
// btcStart ------------------- actor[0]
|
// btcStart ------------------- actor[0] -------------------- ------------------- actor[1] --------------------
|
||||||
// -------------------- ------------------- actor[1]
|
{0, 0, 1, BTC(5), {{"gay", 1, drops(3949999999960), BTC(5), USD(2500)}, {"gar", 1, drops(4049999999970), BTC(0), USD(1375)}}}, // no BTC xfer fee
|
||||||
// --------------------
|
{0, 0, 0, BTC(5), {{"hye", 2, drops(3999999999950), BTC(5), USD(2000)} }} // no xfer fee
|
||||||
{0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
BTC(5),
|
|
||||||
{{"gay", 1, drops(3949999999960), BTC(5), USD(2500)},
|
|
||||||
{"gar",
|
|
||||||
1,
|
|
||||||
drops(4049999999970),
|
|
||||||
BTC(0),
|
|
||||||
USD(1375)}}}, // no BTC xfer fee
|
|
||||||
{0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
BTC(5),
|
|
||||||
{{"hye", 2, drops(3999999999950), BTC(5), USD(2000)}}} // no xfer
|
|
||||||
// fee
|
|
||||||
};
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
// Pick the right tests.
|
// Pick the right tests.
|
||||||
auto const& tests = features[featureFlowCross] ? flowTests : takerTests;
|
auto const& tests = features[featureFlowCross] ? flowTests : takerTests;
|
||||||
|
|||||||
@@ -702,7 +702,6 @@ struct PayStrand_test : public beast::unit_test::suite
|
|||||||
true,
|
true,
|
||||||
false,
|
false,
|
||||||
env.app().logs().journal("Flow"));
|
env.app().logs().journal("Flow"));
|
||||||
(void)ter;
|
|
||||||
(void)_;
|
(void)_;
|
||||||
BEAST_EXPECT(ter == tesSUCCESS);
|
BEAST_EXPECT(ter == tesSUCCESS);
|
||||||
}
|
}
|
||||||
@@ -719,12 +718,10 @@ struct PayStrand_test : public beast::unit_test::suite
|
|||||||
true,
|
true,
|
||||||
false,
|
false,
|
||||||
env.app().logs().journal("Flow"));
|
env.app().logs().journal("Flow"));
|
||||||
(void)ter;
|
|
||||||
(void)_;
|
(void)_;
|
||||||
BEAST_EXPECT(ter == tesSUCCESS);
|
BEAST_EXPECT(ter == tesSUCCESS);
|
||||||
}
|
}
|
||||||
return;
|
}
|
||||||
};
|
|
||||||
|
|
||||||
{
|
{
|
||||||
Env env(*this, features);
|
Env env(*this, features);
|
||||||
@@ -794,12 +791,16 @@ struct PayStrand_test : public beast::unit_test::suite
|
|||||||
B{XRP, USD},
|
B{XRP, USD},
|
||||||
D{gw, bob, usdC});
|
D{gw, bob, usdC});
|
||||||
|
|
||||||
// Path with XRP dst currency
|
// Path with XRP dst currency.
|
||||||
test(
|
test(
|
||||||
env,
|
env,
|
||||||
xrpIssue(),
|
xrpIssue(),
|
||||||
USD.issue(),
|
USD.issue(),
|
||||||
STPath({ipe(XRP)}),
|
STPath({STPathElement{
|
||||||
|
STPathElement::typeCurrency,
|
||||||
|
xrpAccount(),
|
||||||
|
xrpCurrency(),
|
||||||
|
xrpAccount()}}),
|
||||||
tesSUCCESS,
|
tesSUCCESS,
|
||||||
D{alice, gw, usdC},
|
D{alice, gw, usdC},
|
||||||
B{USD, XRP},
|
B{USD, XRP},
|
||||||
@@ -854,7 +855,7 @@ struct PayStrand_test : public beast::unit_test::suite
|
|||||||
BEAST_EXPECT(r.first == temBAD_PATH);
|
BEAST_EXPECT(r.first == temBAD_PATH);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
// The root account can't be the src
|
// The root account can't be the src.
|
||||||
auto r = toStrand(
|
auto r = toStrand(
|
||||||
*env.current(),
|
*env.current(),
|
||||||
noAccount(),
|
noAccount(),
|
||||||
@@ -866,7 +867,7 @@ struct PayStrand_test : public beast::unit_test::suite
|
|||||||
true,
|
true,
|
||||||
false,
|
false,
|
||||||
flowJournal);
|
flowJournal);
|
||||||
BEAST_EXPECT(r.first == terNO_ACCOUNT);
|
BEAST_EXPECT(r.first == temBAD_PATH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1005,20 +1006,6 @@ struct PayStrand_test : public beast::unit_test::suite
|
|||||||
BEAST_EXPECT(ter == tesSUCCESS);
|
BEAST_EXPECT(ter == tesSUCCESS);
|
||||||
BEAST_EXPECT(equal(strand, D{alice, gw, usdC}));
|
BEAST_EXPECT(equal(strand, D{alice, gw, usdC}));
|
||||||
}
|
}
|
||||||
{
|
|
||||||
// Check path with sendMax and node with correct sendMax already set
|
|
||||||
Env env(*this, features);
|
|
||||||
env.fund(XRP(10000), alice, bob, gw);
|
|
||||||
env.trust(USD(1000), alice, bob);
|
|
||||||
env.trust(EUR(1000), alice, bob);
|
|
||||||
env(pay(gw, alice, EUR(100)));
|
|
||||||
auto const path = STPath({STPathElement(
|
|
||||||
STPathElement::typeAll,
|
|
||||||
EUR.account,
|
|
||||||
EUR.currency,
|
|
||||||
EUR.account)});
|
|
||||||
test(env, USD, EUR.issue(), path, tesSUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
// last step xrp from offer
|
// last step xrp from offer
|
||||||
@@ -1029,7 +1016,6 @@ struct PayStrand_test : public beast::unit_test::suite
|
|||||||
|
|
||||||
// alice -> USD/XRP -> bob
|
// alice -> USD/XRP -> bob
|
||||||
STPath path;
|
STPath path;
|
||||||
path.emplace_back(std::nullopt, USD.currency, USD.account.id());
|
|
||||||
path.emplace_back(std::nullopt, xrpCurrency(), std::nullopt);
|
path.emplace_back(std::nullopt, xrpCurrency(), std::nullopt);
|
||||||
|
|
||||||
auto [ter, strand] = toStrand(
|
auto [ter, strand] = toStrand(
|
||||||
|
|||||||
Reference in New Issue
Block a user