20#include <xrpld/app/tx/detail/Taker.h>
22#include <xrpl/beast/unit_test.h>
28 static bool const Buy =
false;
29 static bool const Sell =
true;
39 Amounts
const& amount,
40 Quality
const& quality,
73 cross(Amounts offer, Quality quality)
76 return Amounts(offer.in.zeroed(), offer.out.zeroed());
80 return Amounts(offer.in.zeroed(), offer.out.zeroed());
83 return Amounts(offer.in.zeroed(), offer.out.zeroed());
104 Amounts{offer1.in.zeroed(), offer1.out.zeroed()},
105 Amounts{offer2.in.zeroed(), offer2.out.zeroed()});
109 Amounts{offer1.in.zeroed(), offer1.out.zeroed()},
110 Amounts{offer2.in.zeroed(), offer2.out.zeroed()});
128 static Issue const issue(
136 static Issue const issue(
157 Issue const& issue_in,
159 Issue const& issue_out)
192 Quality taker_quality,
195 Quality cross_quality,
199 Issue const& issue_in,
200 Issue const& issue_out,
212 if (
isXRP(issue_out))
214 else if (
isXRP(issue_in))
232 auto result = taker.
cross(cross_offer, cross_quality);
234 Amounts
const expected(
237 BEAST_EXPECT(expected == result);
239 if (expected != result)
271 testcase(
"XRP Quantization: input");
275 for (
auto NumberSwitchOver : {
false,
true})
277 NumberSO stNumberSO{NumberSwitchOver};
294 if (NumberSwitchOver)
348 if (NumberSwitchOver)
390 if (NumberSwitchOver)
444 if (NumberSwitchOver)
487 if (NumberSwitchOver)
541 if (NumberSwitchOver)
584 if (NumberSwitchOver)
626 if (NumberSwitchOver)
693 if (NumberSwitchOver)
735 if (NumberSwitchOver)
795 testcase(
"XRP Quantization: output");
797 for (
auto NumberSwitchOver : {
false,
true})
799 NumberSO stNumberSO{NumberSwitchOver};
830 if (NumberSwitchOver)
958 if (NumberSwitchOver)
1024 if (NumberSwitchOver)
1067 if (NumberSwitchOver)
1109 if (NumberSwitchOver)
1244 for (
auto NumberSwitchOver : {
false,
true})
1246 NumberSO stNumberSO{NumberSwitchOver};
1270 if (NumberSwitchOver)
1281 {
"2.666666666666667",
"2.666666666666667"},
1298 {
"2.666666666666666",
"2.666666666666666"},
1341 {
"0.6666666666666667",
"0.6666666666666667"},
1346 if (NumberSwitchOver)
1357 {
"1.666666666666667",
"1.666666666666667"},
1374 {
"1.666666666666666",
"1.666666666666666"},
log_os< char > log
Logging output stream.
testcase_t testcase
Memberspace for declaring test cases.
State for the active party during order book or payment operations.
bool done() const
Returns true if order crossing should not continue.
CrossType cross_type() const
Returns the type of crossing that is being performed.
AccountID const & account() const noexcept
Returns the account identifier of the taker.
bool reject(Quality const &quality) const noexcept
Returns true if the quality does not meet the taker's requirements.
BasicTaker::Flow do_cross(Amounts offer, Quality quality, AccountID const &owner)
Perform direct crossing through given offer.
A currency issued by an account.
RAII class to set and restore the Number switchover.
std::string getText() const override
Issue const & issue() const
STAmount get_funds(AccountID const &owner, STAmount const &funds) const override
void set_funds(STAmount const &funds)
Amounts cross(Amounts offer, Quality quality)
TestTaker(CrossType cross_type, Amounts const &amount, Quality const &quality, STAmount const &funds, std::uint32_t flags, Rate const &rate_in, Rate const &rate_out)
std::pair< Amounts, Amounts > cross(Amounts offer1, Quality quality1, Amounts offer2, Quality quality2)
void run() override
Runs the suite.
Quality get_quality(std::string in, std::string out)
STAmount parse_amount(std::string const &amount, Issue const &issue)
std::string format_amount(STAmount const &amount)
Issue const & xrp() const
Issue const & usd() const
Issue const & eur() const
void attempt(bool sell, std::string name, Quality taker_quality, cross_attempt_offer const offer, std::string const funds, Quality cross_quality, cross_attempt_offer const cross, std::string const cross_funds, cross_attempt_offer const flow, Issue const &issue_in, Issue const &issue_out, Rate rate_in=parityRate, Rate rate_out=parityRate)
Amounts parse_amounts(std::string const &amount_in, Issue const &issue_in, std::string const &amount_out, Issue const &issue_out)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
base_uint< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
bool isXRP(AccountID const &c)
AccountID const & xrpAccount()
Compute AccountID from public key.
StrandResult< TInAmt, TOutAmt > flow(PaymentSandbox const &baseView, Strand const &strand, std::optional< TInAmt > const &maxIn, TOutAmt const &out, beast::Journal j)
Request out amount from a strand.
Quality composed_quality(Quality const &lhs, Quality const &rhs)
base_uint< 160, detail::CurrencyTag > Currency
Currency is a hash representing a specific currency.
Currency const & xrpCurrency()
XRP currency.
std::string to_string(base_uint< Bits, Tag > const &a)
STAmount amountFromString(Asset const &asset, std::string const &amount)
constexpr std::uint32_t tfSell
CrossType
The flavor of an offer crossing.
Rate const parityRate
A transfer rate signifying a 1:1 exchange.
Represents a transfer rate.
cross_attempt_offer(std::string const &in_, std::string const &out_)