diff options
author | Max Nikulin <manikulin@gmail.com> | 2024-08-06 16:10:12 +0700 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2024-08-06 10:40:04 -1000 |
commit | b7be0a1fedfeec26e4b7d35357157d5a9209f3ee (patch) | |
tree | fb1584ca7ce34cbb38d34e9ecd4ad84659dfb538 /test/unit/t_balance.cc | |
parent | 28ae2eaccb58e539dfd8f8533508a8edfe8bb027 (diff) | |
download | fork-ledger-b7be0a1fedfeec26e4b7d35357157d5a9209f3ee.tar.gz fork-ledger-b7be0a1fedfeec26e4b7d35357157d5a9209f3ee.tar.bz2 fork-ledger-b7be0a1fedfeec26e4b7d35357157d5a9209f3ee.zip |
Fix copy on write for amount_t::in_place_roundto
- Copy amount quantity before rounding.
- Fix `amount_t::roundto(int)`.
- Transform `balance/testRound` into `balance/testRoundto`.
It was a mix of `round` and `roundto` operation with unclear purpose
and was relying on `in_place_roundto` behavior modifying all copies.
There is no unit tests for balance `round` and `unround` any more.
Closes #2362
Diffstat (limited to 'test/unit/t_balance.cc')
-rw-r--r-- | test/unit/t_balance.cc | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/test/unit/t_balance.cc b/test/unit/t_balance.cc index 066f066e..b730f93b 100644 --- a/test/unit/t_balance.cc +++ b/test/unit/t_balance.cc @@ -429,7 +429,7 @@ BOOST_AUTO_TEST_CASE(testFloor) BOOST_CHECK(b4.valid()); } -BOOST_AUTO_TEST_CASE(testRound) +BOOST_AUTO_TEST_CASE(testRoundto) { amount_t a1("0.00"); amount_t a2("$ 123.123"); @@ -451,9 +451,6 @@ BOOST_AUTO_TEST_CASE(testRound) b2 += a5; b2 += a6; - // <https://github.com/ledger/ledger/issues/2362> - // This block modifies b1 and b2, likely it is a bug, - // but otherwise some assertions fails. a1.in_place_roundto(2); a2.in_place_roundto(2); a3.in_place_roundto(2); @@ -468,18 +465,11 @@ BOOST_AUTO_TEST_CASE(testRound) b4 += a5; b4 += a6; - // After fix of #2362 rounded() and in_place_round() - // likely should be replaced with roundto(2) and - // in_place_roundto(2). - // It looks like rounded() and in_place_round() - // need some other tests, perhaps with unround(). - BOOST_CHECK_EQUAL(b0.rounded(), b0); - BOOST_CHECK_EQUAL(b2.rounded(), b4); - // Relies on b1 modified by amount_t::in_place_roundto(int). - BOOST_CHECK_EQUAL(b1.rounded(), b4); - - b1.in_place_round(); - // Relies on b1 modified by amount_t::in_place_roundto(int). + BOOST_CHECK_EQUAL(b0.roundto(2), b0); + BOOST_CHECK_EQUAL(b2.roundto(2), b4); + BOOST_CHECK_EQUAL(b1.roundto(2), b4); + + b1.in_place_roundto(2); BOOST_CHECK_EQUAL(b1, b3); BOOST_CHECK(b0.valid()); |