Added tests to complete coverage.

This commit is contained in:
John Wiegley 2007-05-08 10:33:25 +00:00
parent 4e9056b6ce
commit 42d799a1fd
4 changed files with 147 additions and 3 deletions

View file

@ -210,10 +210,10 @@ void amount_t::_release()
DEBUG("amounts.refs", quantity << " ref--, now " << (quantity->ref - 1));
if (--quantity->ref == 0) {
if (! (quantity->has_flags(BIGINT_BULK_ALLOC)))
checked_delete(quantity);
else
if (quantity->has_flags(BIGINT_BULK_ALLOC))
quantity->~bigint_t();
else
checked_delete(quantity);
}
}

View file

@ -20,6 +20,71 @@ void AmountTestCase::tearDown()
ledger::set_session_context();
}
void AmountTestCase::testParser()
{
amount_t x0;
amount_t x1;
amount_t x2;
amount_t x3;
amount_t x4(123.456);
amount_t x5(x4);
amount_t x6(x4);
amount_t x7(x4);
amount_t x8("$123.456");
amount_t x9(x8);
amount_t x10(x8);
amount_t x11(x8);
amount_t x12("$100");
assertEqual(amount_t::precision_t(3), x12.commodity().precision());
x1.parse("$100.0000", AMOUNT_PARSE_NO_MIGRATE);
assertEqual(amount_t::precision_t(3), x12.commodity().precision());
assertEqual(x1.commodity(), x12.commodity());
assertEqual(x1, x12);
x0.parse("$100.0000");
assertEqual(amount_t::precision_t(4), x12.commodity().precision());
assertEqual(x0.commodity(), x12.commodity());
assertEqual(x0, x12);
x2.parse("$100.00", AMOUNT_PARSE_NO_REDUCE);
assertEqual(x2, x12);
x3.parse("$100.00", AMOUNT_PARSE_NO_MIGRATE | AMOUNT_PARSE_NO_REDUCE);
assertEqual(x3, x12);
x4.parse("$100.00");
assertEqual(x4, x12);
x5.parse("$100.00", AMOUNT_PARSE_NO_MIGRATE);
assertEqual(x5, x12);
x6.parse("$100.00", AMOUNT_PARSE_NO_REDUCE);
assertEqual(x6, x12);
x7.parse("$100.00", AMOUNT_PARSE_NO_MIGRATE | AMOUNT_PARSE_NO_REDUCE);
assertEqual(x7, x12);
x8.parse("$100.00");
assertEqual(x8, x12);
x9.parse("$100.00", AMOUNT_PARSE_NO_MIGRATE);
assertEqual(x9, x12);
x10.parse("$100.00", AMOUNT_PARSE_NO_REDUCE);
assertEqual(x10, x12);
x11.parse("$100.00", AMOUNT_PARSE_NO_MIGRATE | AMOUNT_PARSE_NO_REDUCE);
assertEqual(x11, x12);
assertTrue(x0.valid());
assertTrue(x1.valid());
assertTrue(x2.valid());
assertTrue(x3.valid());
assertTrue(x5.valid());
assertTrue(x6.valid());
assertTrue(x7.valid());
assertTrue(x8.valid());
assertTrue(x9.valid());
assertTrue(x10.valid());
assertTrue(x11.valid());
assertTrue(x12.valid());
}
void AmountTestCase::testConstructors()
{
amount_t x0;
@ -108,6 +173,7 @@ void AmountTestCase::testCommodityConstructors()
void AmountTestCase::testAssignment()
{
amount_t x0;
amount_t x1 = 123456L;
amount_t x2 = 123456UL;
amount_t x3 = 123.456;
@ -144,6 +210,12 @@ void AmountTestCase::testAssignment()
assertEqual(x10, x3);
assertEqual(x10, x9);
assertFalse(x1.is_null());
x1 = x0; // sets x1 back to uninitialized state
assertTrue(x0.is_null());
assertTrue(x1.is_null());
assertTrue(x0.valid());
assertTrue(x1.valid());
assertTrue(x2.valid());
assertTrue(x3.valid());

View file

@ -9,6 +9,7 @@ class AmountTestCase : public CPPUNIT_NS::TestCase
CPPUNIT_TEST(testConstructors);
CPPUNIT_TEST(testCommodityConstructors);
CPPUNIT_TEST(testParser);
CPPUNIT_TEST(testAssignment);
CPPUNIT_TEST(testCommodityAssignment);
CPPUNIT_TEST(testEquality);
@ -60,6 +61,7 @@ public:
void testConstructors();
void testCommodityConstructors();
void testParser();
void testAssignment();
void testCommodityAssignment();
void testEquality();

View file

@ -23,6 +23,69 @@ class AmountTestCase(unittest.TestCase):
def assertValid(self, amt):
self.assertTrue(amt.valid())
def testParser(self):
x0 = amount()
x1 = amount()
x2 = amount()
x3 = amount()
x4 = amount(123.456)
x5 = amount(x4)
x6 = amount(x4)
x7 = amount(x4)
x8 = amount("$123.456")
x9 = amount(x8)
x10 = amount(x8)
x11 = amount(x8)
x12 = amount("$100")
self.assertEqual(3, x12.commodity().precision())
x1.parse("$100.0000", AMOUNT_PARSE_NO_MIGRATE)
self.assertEqual(3, x12.commodity().precision())
self.assertEqual(x1.commodity(), x12.commodity())
self.assertEqual(x1, x12)
x0.parse("$100.0000")
self.assertEqual(4, x12.commodity().precision())
self.assertEqual(x0.commodity(), x12.commodity())
self.assertEqual(x0, x12)
x2.parse("$100.00", AMOUNT_PARSE_NO_REDUCE)
self.assertEqual(x2, x12)
x3.parse("$100.00", AMOUNT_PARSE_NO_MIGRATE | AMOUNT_PARSE_NO_REDUCE)
self.assertEqual(x3, x12)
x4.parse("$100.00")
self.assertEqual(x4, x12)
x5.parse("$100.00", AMOUNT_PARSE_NO_MIGRATE)
self.assertEqual(x5, x12)
x6.parse("$100.00", AMOUNT_PARSE_NO_REDUCE)
self.assertEqual(x6, x12)
x7.parse("$100.00", AMOUNT_PARSE_NO_MIGRATE | AMOUNT_PARSE_NO_REDUCE)
self.assertEqual(x7, x12)
x8.parse("$100.00")
self.assertEqual(x8, x12)
x9.parse("$100.00", AMOUNT_PARSE_NO_MIGRATE)
self.assertEqual(x9, x12)
x10.parse("$100.00", AMOUNT_PARSE_NO_REDUCE)
self.assertEqual(x10, x12)
x11.parse("$100.00", AMOUNT_PARSE_NO_MIGRATE | AMOUNT_PARSE_NO_REDUCE)
self.assertEqual(x11, x12)
self.assertValid(x0)
self.assertValid(x1)
self.assertValid(x2)
self.assertValid(x3)
self.assertValid(x5)
self.assertValid(x6)
self.assertValid(x7)
self.assertValid(x8)
self.assertValid(x9)
self.assertValid(x10)
self.assertValid(x11)
self.assertValid(x12)
def testConstructors(self):
x0 = amount()
x1 = amount(123456)
@ -98,6 +161,7 @@ class AmountTestCase(unittest.TestCase):
self.assertValid(x10)
def testAssignment(self):
x0 = amount()
x1 = amount(123456)
x2 = amount(123456L)
x3 = amount(123.456)
@ -126,6 +190,12 @@ class AmountTestCase(unittest.TestCase):
self.assertEqual(x10, x3)
self.assertEqual(x10, x9)
self.assertFalse(x1.is_null())
x1 = x0 # sets x1 back to uninitialized state
self.assertTrue(x0.is_null())
self.assertTrue(x1.is_null())
self.assertValid(x0)
self.assertValid(x1)
self.assertValid(x2)
self.assertValid(x3)