mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-22 03:55:53 +00:00
Refactor Number, add tests, update LoanManage, update LoanPay
- Loan tests are not expected to pass. - Refactor Number to put rounding logic into reusable functions. - Add Number tests to explicitly test rounding - may be redundant, but easy to reason about. Verifies that the default rounding matches banker's rounding. - Enable LoanManage. Apparently any remaining issues were fixed by the previous commit's cleanups. - Partially enabled LoanPay.
This commit is contained in:
@@ -744,6 +744,115 @@ public:
|
||||
BEAST_EXPECT(Number(-100, -30000).truncate() == Number(0, 0));
|
||||
}
|
||||
|
||||
void
|
||||
testRounding()
|
||||
{
|
||||
// Test that rounding works as expected.
|
||||
testcase("Rounding");
|
||||
|
||||
using NumberRoundings = std::map<Number::rounding_mode, std::int64_t>;
|
||||
|
||||
std::map<Number, NumberRoundings> const expected{
|
||||
// Positive numbers
|
||||
{Number{13, -1},
|
||||
{{Number::to_nearest, 1},
|
||||
{Number::towards_zero, 1},
|
||||
{Number::downward, 1},
|
||||
{Number::upward, 2}}},
|
||||
{Number{23, -1},
|
||||
{{Number::to_nearest, 2},
|
||||
{Number::towards_zero, 2},
|
||||
{Number::downward, 2},
|
||||
{Number::upward, 3}}},
|
||||
{Number{15, -1},
|
||||
{{Number::to_nearest, 2},
|
||||
{Number::towards_zero, 1},
|
||||
{Number::downward, 1},
|
||||
{Number::upward, 2}}},
|
||||
{Number{25, -1},
|
||||
{{Number::to_nearest, 2},
|
||||
{Number::towards_zero, 2},
|
||||
{Number::downward, 2},
|
||||
{Number::upward, 3}}},
|
||||
{Number{152, -2},
|
||||
{{Number::to_nearest, 2},
|
||||
{Number::towards_zero, 1},
|
||||
{Number::downward, 1},
|
||||
{Number::upward, 2}}},
|
||||
{Number{252, -2},
|
||||
{{Number::to_nearest, 3},
|
||||
{Number::towards_zero, 2},
|
||||
{Number::downward, 2},
|
||||
{Number::upward, 3}}},
|
||||
{Number{17, -1},
|
||||
{{Number::to_nearest, 2},
|
||||
{Number::towards_zero, 1},
|
||||
{Number::downward, 1},
|
||||
{Number::upward, 2}}},
|
||||
{Number{27, -1},
|
||||
{{Number::to_nearest, 3},
|
||||
{Number::towards_zero, 2},
|
||||
{Number::downward, 2},
|
||||
{Number::upward, 3}}},
|
||||
|
||||
// Negative numbers
|
||||
{Number{-13, -1},
|
||||
{{Number::to_nearest, -1},
|
||||
{Number::towards_zero, -1},
|
||||
{Number::downward, -2},
|
||||
{Number::upward, -1}}},
|
||||
{Number{-23, -1},
|
||||
{{Number::to_nearest, -2},
|
||||
{Number::towards_zero, -2},
|
||||
{Number::downward, -3},
|
||||
{Number::upward, -2}}},
|
||||
{Number{-15, -1},
|
||||
{{Number::to_nearest, -2},
|
||||
{Number::towards_zero, -1},
|
||||
{Number::downward, -2},
|
||||
{Number::upward, -1}}},
|
||||
{Number{-25, -1},
|
||||
{{Number::to_nearest, -2},
|
||||
{Number::towards_zero, -2},
|
||||
{Number::downward, -3},
|
||||
{Number::upward, -2}}},
|
||||
{Number{-152, -2},
|
||||
{{Number::to_nearest, -2},
|
||||
{Number::towards_zero, -1},
|
||||
{Number::downward, -2},
|
||||
{Number::upward, -1}}},
|
||||
{Number{-252, -2},
|
||||
{{Number::to_nearest, -3},
|
||||
{Number::towards_zero, -2},
|
||||
{Number::downward, -3},
|
||||
{Number::upward, -2}}},
|
||||
{Number{-17, -1},
|
||||
{{Number::to_nearest, -2},
|
||||
{Number::towards_zero, -1},
|
||||
{Number::downward, -2},
|
||||
{Number::upward, -1}}},
|
||||
{Number{-27, -1},
|
||||
{{Number::to_nearest, -3},
|
||||
{Number::towards_zero, -2},
|
||||
{Number::downward, -3},
|
||||
{Number::upward, -2}}},
|
||||
};
|
||||
|
||||
for (auto const& [num, roundings] : expected)
|
||||
{
|
||||
for (auto const& [mode, val] : roundings)
|
||||
{
|
||||
NumberRoundModeGuard g{mode};
|
||||
auto const res = static_cast<std::int64_t>(num);
|
||||
BEAST_EXPECTS(
|
||||
res == val,
|
||||
to_string(num) + " with mode " + std::to_string(mode) +
|
||||
" expected " + std::to_string(val) + " got " +
|
||||
std::to_string(res));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
run() override
|
||||
{
|
||||
@@ -765,6 +874,7 @@ public:
|
||||
test_inc_dec();
|
||||
test_toSTAmount();
|
||||
test_truncate();
|
||||
testRounding();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user