1#include <xrpl/beast/unit_test/suite.h>
2#include <xrpl/beast/utility/Zero.h>
3#include <xrpl/json/json_value.h>
4#include <xrpl/protocol/SystemParameters.h>
5#include <xrpl/protocol/Units.h>
6#include <xrpl/protocol/XRPAmount.h>
24 BEAST_EXPECT(x.
drops() == 100);
25 BEAST_EXPECT((
std::is_same_v<
decltype(x)::unit_type, unit::dropTag>));
27 BEAST_EXPECT(y.value() == 400);
28 BEAST_EXPECT((
std::is_same_v<
decltype(y)::unit_type, unit::dropTag>));
31 BEAST_EXPECT(z.value() == 1600);
32 BEAST_EXPECT((
std::is_same_v<
decltype(z)::unit_type, unit::dropTag>));
34 FeeLevel32
const f{10};
35 FeeLevel32
const baseFee{100};
40 BEAST_EXPECT(
drops.value() == 1000);
49 BEAST_EXPECT(x.
value() == 100);
50 BEAST_EXPECT((
std::is_same_v<
decltype(x)::unit_type, unit::dropTag>));
52 BEAST_EXPECT(y.value() == 400);
53 BEAST_EXPECT((
std::is_same_v<
decltype(y)::unit_type, unit::dropTag>));
61 BEAST_EXPECT(
drops.value() == 1000);
69 BEAST_EXPECT(x.
value() == 1024);
70 BEAST_EXPECT((
std::is_same_v<
decltype(x)::unit_type, unit::feelevelTag>));
73 BEAST_EXPECT(y.value() == 4096);
74 BEAST_EXPECT((
std::is_same_v<
decltype(y)::unit_type, unit::feelevelTag>));
82 BEAST_EXPECT(
drops.value() == 40);
98 auto y = x.jsonClipped();
105 auto y = x.jsonClipped();
161 auto make = [&](
auto x) ->
FeeLevel64 {
return x; };
167 BEAST_EXPECT(
test.fee() == 0);
169 test = explicitmake(beast::kZero);
170 BEAST_EXPECT(
test.fee() == 0);
173 BEAST_EXPECT(
test.fee() == 0);
175 test = explicitmake(100u);
176 BEAST_EXPECT(
test.fee() == 100);
179 FeeLevel32
const targetOther{300u};
180 test = make(targetSame);
181 BEAST_EXPECT(
test.fee() == 200);
182 BEAST_EXPECT(
test == targetSame);
185 test = make(targetOther);
186 BEAST_EXPECT(
test.fee() == 300);
187 BEAST_EXPECT(
test == targetOther);
190 BEAST_EXPECT(
test.fee() == 200);
192 BEAST_EXPECT(
test.fee() == 300);
195 BEAST_EXPECT(
test.fee() == 200);
196 test = targetOther.fee();
197 BEAST_EXPECT(
test.fee() == 300);
198 BEAST_EXPECT(
test == targetOther);
200 test = targetSame * 2;
201 BEAST_EXPECT(
test.fee() == 400);
202 test = 3 * targetSame;
203 BEAST_EXPECT(
test.fee() == 600);
204 test = targetSame / 10;
205 BEAST_EXPECT(
test.fee() == 20);
208 BEAST_EXPECT(
test.fee() == 220);
211 BEAST_EXPECT(
test.fee() == 20);
214 BEAST_EXPECT(
test.fee() == 21);
216 BEAST_EXPECT(
test.fee() == 22);
218 BEAST_EXPECT(
test.fee() == 21);
220 BEAST_EXPECT(
test.fee() == 20);
223 BEAST_EXPECT(
test.fee() == 100);
225 BEAST_EXPECT(
test.fee() == 50);
227 BEAST_EXPECT(
test.fee() == 11);
240 BEAST_EXPECT(
test.signum() == 0);
242 BEAST_EXPECT(
test.signum() == 1);
252 BEAST_EXPECT(
test.fee() == 0);
254 test = explicitmake(beast::kZero);
255 BEAST_EXPECT(
test.fee() == 0);
258 BEAST_EXPECT(
test.fee() == 0);
260 test = explicitmake(100.0);
261 BEAST_EXPECT(
test.fee() == 100);
265 test = make(targetSame);
266 BEAST_EXPECT(
test.fee() == 200);
267 BEAST_EXPECT(
test == targetSame);
271 BEAST_EXPECT(
test.fee() == 300);
272 BEAST_EXPECT(
test == targetOther);
275 BEAST_EXPECT(
test.fee() == 200);
277 BEAST_EXPECT(
test.fee() == 300);
280 BEAST_EXPECT(
test.fee() == 200);
282 test = targetSame * 2;
283 BEAST_EXPECT(
test.fee() == 400);
284 test = 3 * targetSame;
285 BEAST_EXPECT(
test.fee() == 600);
286 test = targetSame / 10;
287 BEAST_EXPECT(
test.fee() == 20);
290 BEAST_EXPECT(
test.fee() == 220);
293 BEAST_EXPECT(
test.fee() == 20);
296 BEAST_EXPECT(
test.fee() == 21);
298 BEAST_EXPECT(
test.fee() == 22);
300 BEAST_EXPECT(
test.fee() == 21);
302 BEAST_EXPECT(
test.fee() == 20);
305 BEAST_EXPECT(
test.fee() == 100);
307 BEAST_EXPECT(
test.fee() == 50);
315 BEAST_EXPECT(
test.fee() == -50);
316 BEAST_EXPECT(
test.signum() == -1);
322 BEAST_EXPECT(
test.signum() == 0);
324 BEAST_EXPECT(
test.signum() == 1);
333 BEAST_EXPECT(
kInitialXrp.drops() == 100'000'000'000'000'000);
json::Value jsonClipped() const
constexpr value_type value() const
Returns the underlying value.
constexpr value_type drops() const
Returns the number of drops.
void run() override
Runs the suite.
constexpr value_type value() const
Returns the underlying value.
json::Value jsonClipped() const
constexpr value_type fee() const
Returns the number of drops.
@ UInt
unsigned integer value
@ Int
signed integer value
PrettyAmount drops(Integer i)
Returns an XRP PrettyAmount, which is trivially convertible to STAmount.
BEAST_DEFINE_TESTSUITE(AMMClawback, app, xrpl)
constexpr XRPAmount
Convert XRP to drops (integral types).
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::optional< std::uint64_t > mulDiv(std::uint64_t value, std::uint64_t mul, std::uint64_t div)
Return value*mul/div accurately.
std::string to_string(BaseUInt< Bits, Tag > const &a)
FeeLevel< std::uint64_t > FeeLevel64
FeeLevel< double > FeeLevelDouble
unit::ValueUnit< unit::feelevelTag, T > FeeLevel
constexpr XRPAmount kInitialXrp
Configure the native currency.