1#include <xrpl/protocol/Units.h>
3#include <xrpl/beast/utility/Zero.h>
4#include <xrpl/json/json_value.h>
5#include <xrpl/protocol/SystemParameters.h>
6#include <xrpl/protocol/XRPAmount.h>
8#include <gtest/gtest.h>
22 EXPECT_EQ(x.
drops(), 100);
23 EXPECT_TRUE((
std::is_same_v<
decltype(x)::unit_type, unit::dropTag>));
25 EXPECT_EQ(y.value(), 400);
26 EXPECT_TRUE((
std::is_same_v<
decltype(y)::unit_type, unit::dropTag>));
29 EXPECT_EQ(z.value(), 1600);
30 EXPECT_TRUE((
std::is_same_v<
decltype(z)::unit_type, unit::dropTag>));
32 FeeLevel32
const f{10};
33 FeeLevel32
const baseFee{100};
38 EXPECT_EQ(
drops.value(), 1000);
46 EXPECT_EQ(x.
value(), 100);
47 EXPECT_TRUE((
std::is_same_v<
decltype(x)::unit_type, unit::dropTag>));
49 EXPECT_EQ(y.value(), 400);
50 EXPECT_TRUE((
std::is_same_v<
decltype(y)::unit_type, unit::dropTag>));
58 EXPECT_EQ(
drops.value(), 1000);
65 EXPECT_EQ(x.
value(), 1024);
66 EXPECT_TRUE((
std::is_same_v<
decltype(x)::unit_type, unit::feelevelTag>));
69 EXPECT_EQ(y.value(), 4096);
70 EXPECT_TRUE((
std::is_same_v<
decltype(y)::unit_type, unit::feelevelTag>));
78 EXPECT_EQ(
drops.value(), 40);
92 auto y = x.jsonClipped();
99 auto y = x.jsonClipped();
154 auto make = [&](
auto x) ->
FeeLevel64 {
return x; };
160 EXPECT_EQ(
test.fee(), 0);
163 EXPECT_EQ(
test.fee(), 0);
166 EXPECT_EQ(
test.fee(), 0);
168 test = explicitmake(100u);
169 EXPECT_EQ(
test.fee(), 100);
172 FeeLevel32
const targetOther{300u};
173 test = make(targetSame);
174 EXPECT_EQ(
test.fee(), 200);
175 EXPECT_EQ(
test, targetSame);
178 test = make(targetOther);
179 EXPECT_EQ(
test.fee(), 300);
180 EXPECT_EQ(
test, targetOther);
183 EXPECT_EQ(
test.fee(), 200);
185 EXPECT_EQ(
test.fee(), 300);
188 EXPECT_EQ(
test.fee(), 200);
189 test = targetOther.fee();
190 EXPECT_EQ(
test.fee(), 300);
191 EXPECT_EQ(
test, targetOther);
193 test = targetSame * 2;
194 EXPECT_EQ(
test.fee(), 400);
195 test = 3 * targetSame;
196 EXPECT_EQ(
test.fee(), 600);
197 test = targetSame / 10;
198 EXPECT_EQ(
test.fee(), 20);
201 EXPECT_EQ(
test.fee(), 220);
204 EXPECT_EQ(
test.fee(), 20);
207 EXPECT_EQ(
test.fee(), 21);
209 EXPECT_EQ(
test.fee(), 22);
211 EXPECT_EQ(
test.fee(), 21);
213 EXPECT_EQ(
test.fee(), 20);
216 EXPECT_EQ(
test.fee(), 100);
218 EXPECT_EQ(
test.fee(), 50);
220 EXPECT_EQ(
test.fee(), 11);
233 EXPECT_EQ(
test.signum(), 0);
235 EXPECT_EQ(
test.signum(), 1);
245 EXPECT_EQ(
test.fee(), 0);
248 EXPECT_EQ(
test.fee(), 0);
251 EXPECT_EQ(
test.fee(), 0);
253 test = explicitmake(100.0);
254 EXPECT_EQ(
test.fee(), 100);
258 test = make(targetSame);
259 EXPECT_EQ(
test.fee(), 200);
260 EXPECT_EQ(
test, targetSame);
264 EXPECT_EQ(
test.fee(), 300);
265 EXPECT_EQ(
test, targetOther);
268 EXPECT_EQ(
test.fee(), 200);
270 EXPECT_EQ(
test.fee(), 300);
273 EXPECT_EQ(
test.fee(), 200);
275 test = targetSame * 2;
276 EXPECT_EQ(
test.fee(), 400);
277 test = 3 * targetSame;
278 EXPECT_EQ(
test.fee(), 600);
279 test = targetSame / 10;
280 EXPECT_EQ(
test.fee(), 20);
283 EXPECT_EQ(
test.fee(), 220);
286 EXPECT_EQ(
test.fee(), 20);
289 EXPECT_EQ(
test.fee(), 21);
291 EXPECT_EQ(
test.fee(), 22);
293 EXPECT_EQ(
test.fee(), 21);
295 EXPECT_EQ(
test.fee(), 20);
298 EXPECT_EQ(
test.fee(), 100);
300 EXPECT_EQ(
test.fee(), 50);
308 EXPECT_EQ(
test.fee(), -50);
309 EXPECT_EQ(
test.signum(), -1);
315 EXPECT_EQ(
test.signum(), 0);
317 EXPECT_EQ(
test.signum(), 1);
324 EXPECT_EQ(
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.
constexpr value_type value() const
Returns the underlying value.
json::Value jsonClipped() const
constexpr value_type fee() const
Returns the number of drops.
JSON (JavaScript Object Notation).
@ UInt
unsigned integer value
@ Int
signed integer value
PrettyAmount drops(Integer i)
Returns an XRP PrettyAmount, which is trivially convertible to STAmount.
constexpr XRPAmount
Convert XRP to drops (integral types).
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.