xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
test
jtx
AMMTest.h
1
#pragma once
2
3
#include <test/jtx/Account.h>
4
#include <test/jtx/Env.h>
5
#include <test/jtx/amount.h>
6
#include <test/jtx/ter.h>
7
8
#include <xrpl/beast/unit_test/suite.h>
9
#include <xrpl/protocol/Feature.h>
10
#include <xrpl/protocol/STAmount.h>
11
#include <xrpl/protocol/XRPAmount.h>
12
13
#include <
chrono
>
14
#include <
condition_variable
>
15
#include <
cstdint
>
16
#include <
functional
>
17
#include <
mutex
>
18
#include <
optional
>
19
#include <
utility
>
20
#include <
vector
>
21
22
namespace
xrpl::test::jtx
{
23
24
class
AMM
;
25
26
enum class
Fund
{
All
,
Acct
,
Gw
,
TokenOnly
};
27
28
struct
TestAMMArg
29
{
30
std::optional<std::pair<STAmount, STAmount>
>
pool
= std::nullopt;
31
std::uint16_t
tfee
= 0;
32
std::optional<jtx::Ter>
ter
= std::nullopt;
33
std::vector<FeatureBitset>
features
= {
34
// For now, just disable SAV entirely, which locks in the small Number
35
// mantissas
36
jtx::testableAmendments
() - featureSingleAssetVault - featureLendingProtocol};
37
38
bool
noLog
=
false
;
39
};
40
41
// A hint to testAMM() or fund() to create/fund MPT.
42
// A distinct MPT is created if both AMM assets
43
// are MPT. The actual MPT asset can be accessed
44
// via AMM::operator[](0|1).
45
inline
static
auto
gAmmmpt
=
MPT
(
"AMM"
);
46
47
[[maybe_unused]]
std::vector<STAmount>
48
fund
(
49
jtx::Env
& env,
50
jtx::Account
const
& gw,
51
std::vector<jtx::Account>
const
& accounts,
52
std::vector<STAmount>
const
& amts,
53
Fund
how);
54
55
[[maybe_unused]]
std::vector<STAmount>
56
fund
(
57
jtx::Env
& env,
58
jtx::Account
const
& gw,
59
std::vector<jtx::Account>
const
& accounts,
60
STAmount
const
& xrp,
61
std::vector<STAmount>
const
& amts = {},
62
Fund
how =
Fund::All
);
63
64
[[maybe_unused]]
std::vector<STAmount>
65
fund
(
66
jtx::Env
& env,
67
std::vector<jtx::Account>
const
& accounts,
68
STAmount
const
& xrp,
69
std::vector<STAmount>
const
& amts = {},
70
Fund
how =
Fund::All
,
71
std::optional<Account>
const
& mptIssuer = std::nullopt);
72
73
struct
TestAMMArgs
74
{
75
std::optional<std::pair<STAmount, STAmount>
>
const
&
pool
= std::nullopt;
76
std::uint16_t
tfee
= 0;
77
std::optional<jtx::Ter>
const
&
ter
= std::nullopt;
78
std::vector<FeatureBitset>
const
&
features
= {
testableAmendments
()};
79
};
80
81
class
AMMTestBase
:
public
beast::unit_test::Suite
82
{
83
protected
:
84
jtx::Account
const
gw_
;
85
jtx::Account
const
carol_
;
86
jtx::Account
const
alice_
;
87
jtx::Account
const
bob_
;
88
jtx::IOU
const
USD
;
// NOLINT(readability-identifier-naming)
89
jtx::IOU
const
EUR
;
// NOLINT(readability-identifier-naming)
90
jtx::IOU
const
GBP
;
// NOLINT(readability-identifier-naming)
91
jtx::IOU
const
BTC
;
// NOLINT(readability-identifier-naming)
92
jtx::IOU
const
BAD
;
// NOLINT(readability-identifier-naming)
93
94
public
:
95
AMMTestBase
();
96
97
static
FeatureBitset
98
testableAmendments
()
99
{
100
// For now, just disable SAV entirely, which locks in the small Number
101
// mantissas
102
return
jtx::testableAmendments
() - featureSingleAssetVault - featureLendingProtocol;
103
}
104
105
protected
:
110
void
111
testAMM
(
112
std::function
<
void
(
jtx::AMM
&,
jtx::Env
&)>
const
& cb,
113
std::optional
<
std::pair<STAmount, STAmount>
>
const
& pool = std::nullopt,
114
std::uint16_t
tfee = 0,
115
std::optional<jtx::Ter>
const
& ter = std::nullopt,
116
std::vector<FeatureBitset>
const
& features = {
testableAmendments
()});
117
118
void
119
testAMM
(
std::function
<
void
(
jtx::AMM
&,
jtx::Env
&)>
const
& cb,
TestAMMArg
const
&
arg
);
120
};
121
122
class
AMMTest
:
public
jtx::AMMTestBase
123
{
124
protected
:
125
static
XRPAmount
126
reserve
(
jtx::Env
& env,
std::uint32_t
count);
127
128
static
XRPAmount
129
ammCrtFee
(
jtx::Env
& env);
130
131
/* Path_test */
132
/************************************************/
133
class
Gate
134
{
135
private
:
136
std::condition_variable
cv_
;
137
std::mutex
mutex_
;
138
bool
signaled_
=
false
;
139
140
public
:
141
// Thread safe, blocks until signaled or period expires.
142
// Returns `true` if signaled.
143
template
<
class
Rep,
class
Period>
144
bool
145
waitFor
(
std::chrono::duration<Rep, Period>
const
& relTime)
146
{
147
std::unique_lock<std::mutex>
lk(
mutex_
);
148
auto
b =
cv_
.wait_for(lk, relTime, [
this
] {
return
signaled_
; });
149
signaled_
=
false
;
150
return
b;
151
}
152
153
void
154
signal
()
155
{
156
std::scoped_lock
const
lk(
mutex_
);
157
signaled_
=
true
;
158
cv_
.notify_all();
159
}
160
};
161
162
jtx::Env
163
pathTestEnv
();
164
};
165
166
}
// namespace xrpl::test::jtx
chrono
beast::unit_test::Suite
A testsuite class.
Definition
suite.h:52
beast::unit_test::Suite::arg
std::string const & arg() const
Return the argument associated with the runner.
Definition
suite.h:292
xrpl::FeatureBitset
Definition
Feature.h:196
xrpl::STAmount
Definition
STAmount.h:46
xrpl::test::jtx::AMMTestBase
Definition
AMMTest.h:82
xrpl::test::jtx::AMMTestBase::EUR
jtx::IOU const EUR
Definition
AMMTest.h:89
xrpl::test::jtx::AMMTestBase::BTC
jtx::IOU const BTC
Definition
AMMTest.h:91
xrpl::test::jtx::AMMTestBase::USD
jtx::IOU const USD
Definition
AMMTest.h:88
xrpl::test::jtx::AMMTestBase::alice_
jtx::Account const alice_
Definition
AMMTest.h:86
xrpl::test::jtx::AMMTestBase::AMMTestBase
AMMTestBase()
Definition
AMMTest.cpp:106
xrpl::test::jtx::AMMTestBase::GBP
jtx::IOU const GBP
Definition
AMMTest.h:90
xrpl::test::jtx::AMMTestBase::testAMM
void testAMM(std::function< void(jtx::AMM &, jtx::Env &)> const &cb, std::optional< std::pair< STAmount, STAmount > > const &pool=std::nullopt, std::uint16_t tfee=0, std::optional< jtx::Ter > const &ter=std::nullopt, std::vector< FeatureBitset > const &features={testableAmendments()})
testAMM() funds 30,000XRP and 30,000IOU for each non-XRP asset to Alice and Carol
Definition
AMMTest.cpp:120
xrpl::test::jtx::AMMTestBase::gw_
jtx::Account const gw_
Definition
AMMTest.h:84
xrpl::test::jtx::AMMTestBase::testableAmendments
static FeatureBitset testableAmendments()
Definition
AMMTest.h:98
xrpl::test::jtx::AMMTestBase::carol_
jtx::Account const carol_
Definition
AMMTest.h:85
xrpl::test::jtx::AMMTestBase::bob_
jtx::Account const bob_
Definition
AMMTest.h:87
xrpl::test::jtx::AMMTestBase::BAD
jtx::IOU const BAD
Definition
AMMTest.h:92
xrpl::test::jtx::AMMTest::Gate
Definition
AMMTest.h:134
xrpl::test::jtx::AMMTest::Gate::waitFor
bool waitFor(std::chrono::duration< Rep, Period > const &relTime)
Definition
AMMTest.h:145
xrpl::test::jtx::AMMTest::Gate::mutex_
std::mutex mutex_
Definition
AMMTest.h:137
xrpl::test::jtx::AMMTest::Gate::signal
void signal()
Definition
AMMTest.h:154
xrpl::test::jtx::AMMTest::Gate::cv_
std::condition_variable cv_
Definition
AMMTest.h:136
xrpl::test::jtx::AMMTest::Gate::signaled_
bool signaled_
Definition
AMMTest.h:138
xrpl::test::jtx::AMMTest
Definition
AMMTest.h:123
xrpl::test::jtx::AMMTest::reserve
static XRPAmount reserve(jtx::Env &env, std::uint32_t count)
Definition
AMMTest.cpp:199
xrpl::test::jtx::AMMTest::ammCrtFee
static XRPAmount ammCrtFee(jtx::Env &env)
Definition
AMMTest.cpp:205
xrpl::test::jtx::AMMTest::pathTestEnv
jtx::Env pathTestEnv()
Definition
AMMTest.cpp:211
xrpl::test::jtx::AMM
Convenience class to test AMM functionality.
Definition
src/test/jtx/AMM.h:138
xrpl::test::jtx::Account
Immutable cryptographic account descriptor.
Definition
jtx/Account.h:21
xrpl::test::jtx::Env
A transaction testing environment.
Definition
Env.h:161
xrpl::test::jtx::IOU
Converts to IOU Issue or STAmount.
Definition
src/test/jtx/amount.h:404
xrpl::test::jtx::MPT
Converts to MPT Issue or STAmount.
Definition
src/test/jtx/amount.h:497
condition_variable
cstdint
std::chrono::duration
std::function
functional
std::uint16_t
mutex
xrpl::test::jtx
Definition
Oracle_test.cpp:34
xrpl::test::jtx::fund
std::vector< STAmount > fund(jtx::Env &env, jtx::Account const &gw, std::vector< jtx::Account > const &accounts, std::vector< STAmount > const &amts, Fund how)
Definition
AMMTest.cpp:34
xrpl::test::jtx::testableAmendments
FeatureBitset testableAmendments()
Definition
Env.h:92
xrpl::test::jtx::gAmmmpt
static auto gAmmmpt
Definition
AMMTest.h:45
xrpl::test::jtx::Fund
Fund
Definition
AMMTest.h:26
xrpl::test::jtx::Fund::Gw
@ Gw
Definition
AMMTest.h:26
xrpl::test::jtx::Fund::Acct
@ Acct
Definition
AMMTest.h:26
xrpl::test::jtx::Fund::TokenOnly
@ TokenOnly
Definition
AMMTest.h:26
xrpl::test::jtx::Fund::All
@ All
Definition
AMMTest.h:26
xrpl::test::XRPAmount
constexpr XRPAmount
Convert XRP to drops (integral types).
Definition
TxTest.h:54
optional
std::pair
std::scoped_lock
xrpl::test::jtx::TestAMMArg
Definition
AMMTest.h:29
xrpl::test::jtx::TestAMMArg::ter
std::optional< jtx::Ter > ter
Definition
AMMTest.h:32
xrpl::test::jtx::TestAMMArg::pool
std::optional< std::pair< STAmount, STAmount > > pool
Definition
AMMTest.h:30
xrpl::test::jtx::TestAMMArg::tfee
std::uint16_t tfee
Definition
AMMTest.h:31
xrpl::test::jtx::TestAMMArg::noLog
bool noLog
Definition
AMMTest.h:38
xrpl::test::jtx::TestAMMArg::features
std::vector< FeatureBitset > features
Definition
AMMTest.h:33
xrpl::test::jtx::TestAMMArgs
Definition
AMMTest.h:74
xrpl::test::jtx::TestAMMArgs::pool
std::optional< std::pair< STAmount, STAmount > > const & pool
Definition
AMMTest.h:75
xrpl::test::jtx::TestAMMArgs::tfee
std::uint16_t tfee
Definition
AMMTest.h:76
xrpl::test::jtx::TestAMMArgs::ter
std::optional< jtx::Ter > const & ter
Definition
AMMTest.h:77
xrpl::test::jtx::TestAMMArgs::features
std::vector< FeatureBitset > const & features
Definition
AMMTest.h:78
std::unique_lock
utility
vector
Generated by
1.17.0