ledger/test/unit/t_balance.cc
2014-08-11 21:01:24 +05:30

130 lines
2.5 KiB
C++

#define BOOST_TEST_DYN_LINK
//#define BOOST_TEST_MODULE balance
#include <boost/test/unit_test.hpp>
#include <system.hh>
#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_CHECK(b5.valid());
}
BOOST_AUTO_TEST_CASE(testSubtraction)
{
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(), 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_CHECK(b5.valid());
}
BOOST_AUTO_TEST_SUITE_END()