20#include <xrpld/app/tx/detail/Taker.h>
21#include <xrpl/beast/unit_test.h>
27 static bool const Buy =
false;
28 static bool const Sell =
true;
38 Amounts
const& amount,
39 Quality
const& quality,
72 cross(Amounts offer, Quality quality)
75 return Amounts(offer.in.zeroed(), offer.out.zeroed());
79 return Amounts(offer.in.zeroed(), offer.out.zeroed());
82 return Amounts(offer.in.zeroed(), offer.out.zeroed());
103 Amounts{offer1.in.zeroed(), offer1.out.zeroed()},
104 Amounts{offer2.in.zeroed(), offer2.out.zeroed()});
108 Amounts{offer1.in.zeroed(), offer1.out.zeroed()},
109 Amounts{offer2.in.zeroed(), offer2.out.zeroed()});
127 static Issue const issue(
135 static Issue const issue(
156 Issue const& issue_in,
158 Issue const& issue_out)
191 Quality taker_quality,
194 Quality cross_quality,
198 Issue const& issue_in,
199 Issue const& issue_out,
211 if (
isXRP(issue_out))
213 else if (
isXRP(issue_in))
231 auto result = taker.
cross(cross_offer, cross_quality);
233 Amounts
const expected(
236 BEAST_EXPECT(expected == result);
238 if (expected != result)
270 testcase(
"XRP Quantization: input");
274 for (
auto NumberSwitchOver : {
false,
true})
276 NumberSO stNumberSO{NumberSwitchOver};
293 if (NumberSwitchOver)
347 if (NumberSwitchOver)
389 if (NumberSwitchOver)
443 if (NumberSwitchOver)
486 if (NumberSwitchOver)
540 if (NumberSwitchOver)
583 if (NumberSwitchOver)
625 if (NumberSwitchOver)
692 if (NumberSwitchOver)
734 if (NumberSwitchOver)
794 testcase(
"XRP Quantization: output");
796 for (
auto NumberSwitchOver : {
false,
true})
798 NumberSO stNumberSO{NumberSwitchOver};
829 if (NumberSwitchOver)
957 if (NumberSwitchOver)
1023 if (NumberSwitchOver)
1066 if (NumberSwitchOver)
1108 if (NumberSwitchOver)
1243 for (
auto NumberSwitchOver : {
false,
true})
1245 NumberSO stNumberSO{NumberSwitchOver};
1269 if (NumberSwitchOver)
1280 {
"2.666666666666667",
"2.666666666666667"},
1297 {
"2.666666666666666",
"2.666666666666666"},
1340 {
"0.6666666666666667",
"0.6666666666666667"},
1345 if (NumberSwitchOver)
1356 {
"1.666666666666667",
"1.666666666666667"},
1373 {
"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.
STAmount amountFromString(Asset const &issue, std::string const &amount)
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)
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_)