diff options
Diffstat (limited to 'tests/amounts.h')
-rw-r--r-- | tests/amounts.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/tests/amounts.h b/tests/amounts.h new file mode 100644 index 00000000..a72e57d2 --- /dev/null +++ b/tests/amounts.h @@ -0,0 +1,169 @@ +#ifndef __TESTAMOUNT_H +#define __TESTAMOUNT_H + +#include <cxxtest/TestSuite.h> + +#include <amount.h> + +using namespace ledger; + +class TestAmount : public CxxTest::TestSuite +{ +public: + void testCreateAmountWithoutCommodityFromInteger() + { + amount_t a((long int)42); + TS_ASSERT_EQUALS("", a.commodity().symbol()); + TS_ASSERT_EQUALS("", a.commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a.quantity_string()); + } + + void testCreateAmountWithoutCommodity() + { + amount_t a("42"); + TS_ASSERT_EQUALS("", a.commodity().symbol()); + TS_ASSERT_EQUALS("", a.commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a.quantity_string()); + } + + void testCreateAmountWithPrefixCommodity() + { + amount_t *a; + a = new amount_t("$ 42"); + TS_ASSERT_EQUALS("$", a->commodity().symbol()); + TS_ASSERT_EQUALS("$", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCreateAmountWithPostfixCommodity() + { + amount_t *a; + a = new amount_t("42 GLD"); + TS_ASSERT_EQUALS("GLD", a->commodity().symbol()); + TS_ASSERT_EQUALS("GLD", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCreateAmountWithPrefixCommodityContainingSpace() + { + amount_t *a; + a = new amount_t("\"one dollar\" 42"); + TS_ASSERT_EQUALS("\"one dollar\"", a->commodity().symbol()); + TS_ASSERT_EQUALS("one dollar", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCreateAmountWithPostfixCommodityContainingSpace() + { + amount_t *a; + a = new amount_t("42 \"swedish crowns\""); + TS_ASSERT_EQUALS("\"swedish crowns\"", a->commodity().symbol()); + TS_ASSERT_EQUALS("swedish crowns", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCreateAmountWithDirectPrefixCommodity() + { + amount_t *a; + a = new amount_t("$42"); + TS_ASSERT_EQUALS("$", a->commodity().symbol()); + TS_ASSERT_EQUALS("$", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCreateAmountWithDirectPostfixCommodity() + { + amount_t *a; + a = new amount_t("42GLD"); + TS_ASSERT_EQUALS("GLD", a->commodity().symbol()); + TS_ASSERT_EQUALS("GLD", a->commodity().base_symbol()); + TS_ASSERT_EQUALS("42", a->quantity_string()); + } + + void testCannotCreateAmountWithoutQuantity() + { + TS_ASSERT_THROWS(new amount_t("$"), amount_error*); + } + + void testCreateBiiigIntegerAmount() + { + amount_t a("12345678901234567890123456789012345678901234567890"); + TS_ASSERT_EQUALS("12345678901234567890123456789012345678901234567890", + a.quantity_string()); + } + + void testCreateBiiigDecimalAmount() + { + amount_t a("12345678.901234567890123456789012345678901234567890"); + TS_ASSERT_EQUALS("12345678.901234567890123456789012345678901234567890", + a.quantity_string()); + } + + void testCreateCommodityAnnotatedWithEntry() + { + amount_t a("10 AAPL (entry 6)"); + TS_ASSERT_EQUALS("10", a.quantity_string()); + commodity_t c = a.commodity(); + TS_ASSERT_EQUALS("AAPL", c.symbol()); + TS_ASSERT_EQUALS("AAPL", c.base_symbol()); + TS_ASSERT(c.annotated); + //TODO: check entry annotation + } + + void testCreateCommodityAnnotatedWithEntry2() + { + amount_t *a = new amount_t("10 AAPL (entry 6)"); + TS_ASSERT_EQUALS("10", a->quantity_string()); + commodity_t c = a->commodity(); + TS_ASSERT_EQUALS("AAPL", c.symbol()); + TS_ASSERT_EQUALS("AAPL", c.base_symbol()); + TS_ASSERT(c.annotated); + //TODO: check entry annotation + } + + void testAddTwoAmountsWithoutCommodity() + { + amount_t a("6"); + amount_t b("9"); + TS_ASSERT_EQUALS(* new amount_t((long int)15), a+b); + } + + void testAddTwoAmountsWithSameCommodity() + { + amount_t a("$ 6"); + amount_t b("$ 9"); + TS_ASSERT_EQUALS(* new amount_t("$ 15"), a+b); + } + + void testCannotAddTwoAmountsWithDifferentCommodities() + { + amount_t a("$ 6"); + amount_t b("9 GLD"); + TS_ASSERT_THROWS(a+b, amount_error*); + } + + void testCompareTwoAmountsWithSameCommodity() + { + amount_t a("6 SCOX"); + amount_t b("9 SCOX"); + TS_ASSERT(a < b); + TS_ASSERT(a <= b); + TS_ASSERT(!(a > b)); + TS_ASSERT(!(a >= b)); + TS_ASSERT(!(a == b)); + } + + void testCannotCompareTwoAmountsWithDifferentCommodities() + { + amount_t a("$ 6"); + amount_t b("9 GLD"); + + TS_ASSERT_THROWS(a < b, amount_error*); + TS_ASSERT_THROWS(a <= b, amount_error*); + TS_ASSERT_THROWS(a > b, amount_error*); + TS_ASSERT_THROWS(a >= b, amount_error*); + TS_ASSERT(!(a == b)); + } +}; + +#endif // __TESTAMOUNT_H |