Add conversions between Number, XRPAmount and int64_t

* Conversions to Number are implicit
* Conversions away from Number are explicit and potentially lossy
* If lossy, round to nearest, and to even on tie
This commit is contained in:
Howard Hinnant
2022-04-15 16:20:52 -04:00
committed by Elliot Lee
parent 0ee63b7c7b
commit 476ee8a479
3 changed files with 117 additions and 0 deletions

View File

@@ -126,6 +126,75 @@ public:
BEAST_EXPECT(x == z);
}
void
test_to_integer()
{
Number x[]{
Number{0},
Number{1},
Number{2},
Number{3},
Number{-1},
Number{-2},
Number{-3},
Number{10},
Number{99},
Number{1155},
Number{9'999'999'999'999'999, 0},
Number{9'999'999'999'999'999, 1},
Number{9'999'999'999'999'999, 2},
Number{-9'999'999'999'999'999, 2},
Number{15, -1},
Number{14, -1},
Number{16, -1},
Number{25, -1},
Number{6, -1},
Number{5, -1},
Number{4, -1},
Number{-15, -1},
Number{-14, -1},
Number{-16, -1},
Number{-25, -1},
Number{-6, -1},
Number{-5, -1},
Number{-4, -1}};
std::int64_t y[]{
0,
1,
2,
3,
-1,
-2,
-3,
10,
99,
1155,
9'999'999'999'999'999,
99'999'999'999'999'990,
999'999'999'999'999'900,
-999'999'999'999'999'900,
2,
1,
2,
2,
1,
0,
0,
-2,
-1,
-2,
-2,
-1,
0,
0};
static_assert(std::size(x) == std::size(y));
for (unsigned u = 0; u < std::size(x); ++u)
{
auto j = static_cast<std::int64_t>(x[u]);
BEAST_EXPECT(j == y[u]);
}
}
void
run() override
{
@@ -135,6 +204,7 @@ public:
test_div();
test_root();
testConversions();
test_to_integer();
}
};