#define BOOST_TEST_DYN_LINK //#define BOOST_TEST_MODULE balance #include #include #include "balance.h" using namespace ledger; struct balance_fixture { balance_fixture() { times_initialize(); amount_t::initialize(); // Cause the display precision for dollars to be initialized to 2. amount_t x1("$1.00"); BOOST_CHECK(x1); amount_t::stream_fullstrings = true; // make reports from UnitTests accurate } ~balance_fixture() { amount_t::stream_fullstrings = false; amount_t::shutdown(); times_shutdown(); } }; BOOST_FIXTURE_TEST_SUITE(balance, balance_fixture) BOOST_AUTO_TEST_CASE(testConstructors) { balance_t b0; balance_t b1(1.00); balance_t b2(123456UL); balance_t b3(12345L); BOOST_CHECK_EQUAL(balance_t(), b0); BOOST_CHECK_NE(balance_t("0"), b0); BOOST_CHECK_NE(balance_t("0.0"), b0); BOOST_CHECK_EQUAL(b2, 123456UL); BOOST_CHECK_EQUAL(b3, 12345L); BOOST_CHECK(b0.valid()); BOOST_CHECK(b1.valid()); BOOST_CHECK(b2.valid()); BOOST_CHECK(b3.valid()); } BOOST_AUTO_TEST_CASE(testAddition) { amount_t a0; amount_t a1("$1"); amount_t a2("2 EUR"); amount_t a3("0.00 CAD"); amount_t a4("$2"); balance_t b0; balance_t b1(1.00); balance_t b2(2UL); balance_t b3(2L); balance_t b4; balance_t b5; b0 += b1; b2 += b3; b3 += a1; b3 += a2; b4 += b3; b5 += a1; b5 += a4; BOOST_CHECK_EQUAL(balance_t(1.00), b0); BOOST_CHECK_EQUAL(b3 += a3, b4); BOOST_CHECK_EQUAL(balance_t(4L), b2); BOOST_CHECK_EQUAL(balance_t() += amount_t("$3"), b5); BOOST_CHECK_THROW(b3 += a0, balance_error); BOOST_CHECK(b0.valid()); BOOST_CHECK(b1.valid()); BOOST_CHECK(b2.valid()); BOOST_CHECK(b3.valid()); BOOST_CHECK(b4.valid()); } BOOST_AUTO_TEST_SUITE_END()