summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2014-08-12 11:46:32 -0500
committerJohn Wiegley <johnw@newartisans.com>2014-08-12 11:46:32 -0500
commitce3102923658ce53194832b524d455b24a38af3f (patch)
tree5d52de069ddcede5fed827bc63e37b9888cb4e50
parent8dbeb91493cebd461fed15e66bde685b3edec0fd (diff)
parent0e1ced72bd7839162a33eb34f717a94eae777fc4 (diff)
downloadfork-ledger-ce3102923658ce53194832b524d455b24a38af3f.tar.gz
fork-ledger-ce3102923658ce53194832b524d455b24a38af3f.tar.bz2
fork-ledger-ce3102923658ce53194832b524d455b24a38af3f.zip
Merge pull request #316 from tripun/code_coverage
expand unit tests in t_balance.cc
-rw-r--r--test/unit/t_balance.cc496
1 files changed, 494 insertions, 2 deletions
diff --git a/test/unit/t_balance.cc b/test/unit/t_balance.cc
index 0d681a88..c4ec2f31 100644
--- a/test/unit/t_balance.cc
+++ b/test/unit/t_balance.cc
@@ -28,6 +28,498 @@ struct balance_fixture {
}
};
-//BOOST_FIXTURE_TEST_SUITE(balance, balance_fixture)
+BOOST_FIXTURE_TEST_SUITE(balance, balance_fixture)
-//BOOST_AUTO_TEST_SUITE_END()
+BOOST_AUTO_TEST_CASE(testConstructors)
+{
+ balance_t b0;
+ balance_t b1(1.00);
+ balance_t b2(123456UL);
+ balance_t b3(12345L);
+ balance_t b4(string ("EUR 123"));
+ balance_t b5("$ 456");
+ balance_t b6;
+ balance_t b7(amount_t("$ 1.00"));
+ balance_t b8(b7);
+
+ 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_EQUAL(b4, "EUR 123");
+ BOOST_CHECK_EQUAL(b5, string("$ 456"));
+ BOOST_CHECK_EQUAL(b7, b8);
+ BOOST_CHECK_EQUAL(b8, amount_t("$ 1.00"));
+
+ b5 = "euro 2345";
+ b6 = string("DM -34532");
+ b7 = amount_t("$ 1.00");
+
+ b8 = b5;
+ BOOST_CHECK_EQUAL(b5, b8);
+
+ 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_CHECK(b6.valid());
+ BOOST_CHECK(b7.valid());
+ BOOST_CHECK(b8.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(b3 -= b2, b3);
+ 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(testEqaulity)
+{
+ amount_t a0;
+ amount_t a1("$1");
+ amount_t a2("2 EUR");
+ amount_t a3("0.00 CAD");
+
+ balance_t b0;
+ balance_t b1(1.00);
+ balance_t b2(2UL);
+ balance_t b3(2L);
+ balance_t b4("EUR 2");
+ balance_t b5("$-1");
+ balance_t b6("0.00");
+ balance_t b7("0.00");
+
+
+ BOOST_CHECK(b2 == b3);
+ BOOST_CHECK(b4 == a2);
+ BOOST_CHECK(b1 == "1.00");
+ BOOST_CHECK(b5 == amount_t("-$1"));
+ BOOST_CHECK(!(b6 == "0"));
+ BOOST_CHECK(!(b6 == a3));
+ BOOST_CHECK(!(b6 == "0.00"));
+ BOOST_CHECK(b6 == b7);
+
+ b4 += b5;
+ b5 += a2;
+
+ BOOST_CHECK(b4 == b5);
+
+ BOOST_CHECK_THROW(b0 == 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_CHECK(b6.valid());
+ BOOST_CHECK(b7.valid());
+}
+
+BOOST_AUTO_TEST_CASE(testMultiplication)
+{
+ amount_t a0;
+ amount_t a1("0.00");
+
+ balance_t b0;
+ balance_t b1(1.00);
+ balance_t b2(2UL);
+ balance_t b3("CAD -3");
+ balance_t b4("EUR 4.99999");
+ balance_t b5("$1");
+ balance_t b6;
+
+ BOOST_CHECK_EQUAL(b1 *= 2.00, amount_t(2.00));
+ BOOST_CHECK_EQUAL(b2 *= 2L, amount_t(4L));
+ BOOST_CHECK_EQUAL(b2 *= 2UL, amount_t(8UL));
+ BOOST_CHECK_EQUAL(b3 *= amount_t("-8 CAD"), amount_t("CAD 24"));
+ BOOST_CHECK_EQUAL(b0 *= 2UL, b0);
+ BOOST_CHECK_EQUAL(b0 *= a1, a1);
+
+ b6 += b3;
+ b3 += b4;
+ b3 += b5;
+ b3 *= 2L;
+ b6 *= 2L;
+ b4 *= 2L;
+ b5 *= 2L;
+ b6 += b4;
+ b6 += b5;
+
+ BOOST_CHECK_EQUAL(b3, b6);
+
+ BOOST_CHECK_THROW(b1 *= a0 , balance_error);
+ BOOST_CHECK_THROW(b4 *= amount_t("1 CAD") , balance_error);
+ BOOST_CHECK_THROW(b3 *= amount_t("1 CAD") , 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_CHECK(b6.valid());
+}
+
+BOOST_AUTO_TEST_CASE(testDivision)
+{
+ amount_t a0;
+ amount_t a1("0.00");
+
+ balance_t b0;
+ balance_t b1(4.00);
+ balance_t b2(4UL);
+ balance_t b3("CAD -24");
+ balance_t b4("EUR 4");
+ balance_t b5("$2");
+ balance_t b6;
+
+ BOOST_CHECK_EQUAL(b1 /= 2.00, amount_t(2.00));
+ BOOST_CHECK_EQUAL(b2 /= 2L, amount_t(2L));
+ BOOST_CHECK_EQUAL(b2 /= 2UL, amount_t(1UL));
+ BOOST_CHECK_EQUAL(b3 /= amount_t("-3 CAD"), amount_t("CAD 8"));
+ BOOST_CHECK_EQUAL(b0 /= 2UL, b0);
+
+ b6 += b3;
+ b3 += b4;
+ b3 += b5;
+ b3 /= 2L;
+ b6 /= 2L;
+ b4 /= 2L;
+ b5 /= 2L;
+ b6 += b4;
+ b6 += b5;
+
+ BOOST_CHECK_EQUAL(b3, b6);
+
+ BOOST_CHECK_THROW(b1 /= a0 , balance_error);
+ BOOST_CHECK_THROW(b1 /= a1 , balance_error);
+ BOOST_CHECK_THROW(b4 /= amount_t("1 CAD") , balance_error);
+ BOOST_CHECK_THROW(b3 /= amount_t("1 CAD") , 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_CHECK(b6.valid());
+}
+
+BOOST_AUTO_TEST_CASE(testNegation)
+{
+ amount_t a1("0.00");
+ amount_t a2("$ 123");
+ amount_t a3("EUR 456");
+
+ balance_t b0;
+ balance_t b1;
+ balance_t b2;
+ balance_t b3;
+
+ b1 += a1;
+ b1 += a2;
+ b1 += a3;
+ b2 += -a1;
+ b2 += -a2;
+ b2 += -a3;
+ b3 = -b1;
+
+ BOOST_CHECK_EQUAL(b0.negated(), b0);
+ BOOST_CHECK_EQUAL(b2, b3);
+ BOOST_CHECK_EQUAL(b2, -b1);
+ BOOST_CHECK_EQUAL(b2.negated(), b1);
+
+ b2.in_place_negate();
+
+ BOOST_CHECK_EQUAL(b2, b1);
+ BOOST_CHECK_EQUAL(b1, -b3);
+
+ BOOST_CHECK(b0.valid());
+ BOOST_CHECK(b1.valid());
+ BOOST_CHECK(b2.valid());
+ BOOST_CHECK(b3.valid());
+}
+
+BOOST_AUTO_TEST_CASE(testAbs)
+{
+ amount_t a1("0.00");
+ amount_t a2("$ 123");
+ amount_t a3("EUR 456");
+
+ balance_t b0;
+ balance_t b1;
+ balance_t b2;
+
+ b1 += a1;
+ b1 += a2;
+ b1 += a3;
+ b2 += -a1;
+ b2 += -a2;
+ b2 += -a3;
+
+ BOOST_CHECK_EQUAL(b0.abs(), b0);
+ BOOST_CHECK_EQUAL(b2.abs(), b1.abs());
+
+ BOOST_CHECK(b0.valid());
+ BOOST_CHECK(b1.valid());
+ BOOST_CHECK(b2.valid());
+}
+
+BOOST_AUTO_TEST_CASE(testCeiling)
+{
+ amount_t a1("0.00");
+ amount_t a2("$ 123.123");
+ amount_t a3("EUR 456.56");
+ amount_t a4(-a1);
+ amount_t a5(-a2);
+ amount_t a6(-a3);
+
+ balance_t b0;
+ balance_t b1;
+ balance_t b2;
+ balance_t b3;
+ balance_t b4;
+
+ b1 += a1;
+ b1 += a2;
+ b1 += a3;
+ b2 += -a1;
+ b2 += -a2;
+ b2 += -a3;
+
+ b3 += a1.ceilinged();
+ b3 += a2.ceilinged();
+ b3 += a3.ceilinged();
+ b4 += a4.ceilinged();
+ b4 += a5.ceilinged();
+ b4 += a6.ceilinged();
+
+ BOOST_CHECK_EQUAL(b0.ceilinged(), b0);
+ BOOST_CHECK_EQUAL(b2.ceilinged(), b4);
+ BOOST_CHECK_EQUAL(b1.ceilinged(), b3);
+
+ b1.in_place_ceiling();
+ BOOST_CHECK_EQUAL(b1, b3);
+
+ BOOST_CHECK(b0.valid());
+ BOOST_CHECK(b1.valid());
+ BOOST_CHECK(b2.valid());
+ BOOST_CHECK(b3.valid());
+ BOOST_CHECK(b4.valid());
+}
+
+BOOST_AUTO_TEST_CASE(testFloor)
+{
+ amount_t a1("0.00");
+ amount_t a2("$ 123.123");
+ amount_t a3("EUR 456.56");
+ amount_t a4(-a1);
+ amount_t a5(-a2);
+ amount_t a6(-a3);
+
+ balance_t b0;
+ balance_t b1;
+ balance_t b2;
+ balance_t b3;
+ balance_t b4;
+
+ b1 += a1;
+ b1 += a2;
+ b1 += a3;
+ b2 += -a1;
+ b2 += -a2;
+ b2 += -a3;
+
+ b3 += a1.floored();
+ b3 += a2.floored();
+ b3 += a3.floored();
+ b4 += a4.floored();
+ b4 += a5.floored();
+ b4 += a6.floored();
+
+ BOOST_CHECK_EQUAL(b0.floored(), b0);
+ BOOST_CHECK_EQUAL(b2.floored(), b4);
+ BOOST_CHECK_EQUAL(b1.floored(), b3);
+
+ b1.in_place_floor();
+ BOOST_CHECK_EQUAL(b1, b3);
+
+ BOOST_CHECK(b0.valid());
+ BOOST_CHECK(b1.valid());
+ BOOST_CHECK(b2.valid());
+ BOOST_CHECK(b3.valid());
+ BOOST_CHECK(b4.valid());
+}
+
+BOOST_AUTO_TEST_CASE(testRound)
+{
+ amount_t a1("0.00");
+ amount_t a2("$ 123.123");
+ amount_t a3("EUR 456.567");
+ amount_t a4("0.00");
+ amount_t a5("$ 123.12");
+ amount_t a6("EUR 456.57");
+
+ balance_t b0;
+ balance_t b1;
+ balance_t b2;
+ balance_t b3;
+ balance_t b4;
+
+ b1 += a1;
+ b1 += a2;
+ b1 += a3;
+ b2 += a4;
+ b2 += a5;
+ b2 += a6;
+
+ a1.in_place_roundto(2);
+ a2.in_place_roundto(2);
+ a3.in_place_roundto(2);
+ a4.in_place_roundto(2);
+ a5.in_place_roundto(2);
+ a6.in_place_roundto(2);
+
+ b3 += a1;
+ b3 += a2;
+ b3 += a3;
+ b4 += a4;
+ b4 += a5;
+ b4 += a6;
+
+ BOOST_CHECK_EQUAL(b0.rounded(), b0);
+ BOOST_CHECK_EQUAL(b2.rounded(), b4);
+ BOOST_CHECK_EQUAL(b1.rounded(), b4);
+
+ b1.in_place_round();
+ BOOST_CHECK_EQUAL(b1, b3);
+
+ BOOST_CHECK(b0.valid());
+ BOOST_CHECK(b1.valid());
+ BOOST_CHECK(b2.valid());
+ BOOST_CHECK(b3.valid());
+ BOOST_CHECK(b4.valid());
+}
+
+BOOST_AUTO_TEST_CASE(testTruth)
+{
+ amount_t a1("0.00");
+ amount_t a2("$ 123");
+ amount_t a3("EUR 456");
+
+ balance_t b0;
+ balance_t b1;
+
+ b1 += a1;
+ b1 += a2;
+ b1 += a3;
+
+ BOOST_CHECK(!b0);
+ BOOST_CHECK(b1);
+
+ BOOST_CHECK(b0.valid());
+ BOOST_CHECK(b1.valid());
+}
+
+BOOST_AUTO_TEST_CASE(testForZero)
+{
+ amount_t a1("0.00");
+ amount_t a2("$ 123");
+ amount_t a3("EUR 456");
+
+ balance_t b0;
+ balance_t b1;
+
+ b1 += a1;
+ b1 += a2;
+ b1 += a3;
+
+ BOOST_CHECK(b0.is_empty());
+ BOOST_CHECK(b0.is_zero());
+ BOOST_CHECK(b0.is_realzero());
+ BOOST_CHECK(!b0.is_nonzero());
+ BOOST_CHECK(!b1.is_empty());
+ BOOST_CHECK(!b1.is_zero());
+ BOOST_CHECK(!b1.is_realzero());
+ BOOST_CHECK(b1.is_nonzero());
+
+ BOOST_CHECK(b0.valid());
+ BOOST_CHECK(b1.valid());
+}
+
+BOOST_AUTO_TEST_SUITE_END()