From 56059a5a228d28be119a547eb21531ec8648b05f Mon Sep 17 00:00:00 2001 From: Linas Vepstas Date: Fri, 2 Jul 2004 03:11:09 +0000 Subject: [PATCH] add more tests involving negative quantities git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@10129 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/engine/test/test-numeric.c | 51 +++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/engine/test/test-numeric.c b/src/engine/test/test-numeric.c index a6dab65c35..8086c7b676 100644 --- a/src/engine/test/test-numeric.c +++ b/src/engine/test/test-numeric.c @@ -400,12 +400,60 @@ check_add_subtract (void) gnc_numeric_sub(a, b, 100, GNC_HOW_RND_ROUND), a, b, "expected %s got %s = %s - %s for sub 100ths (banker's)"); + /* ------------------------------------------------------------ */ /* This test has failed before */ - gnc_numeric c = gnc_numeric_neg (b); + gnc_numeric c = gnc_numeric_neg (a); + gnc_numeric d = gnc_numeric_neg (b); gnc_numeric z = gnc_numeric_zero(); check_binary_op (c, gnc_numeric_add_fixed(z,c), z, c, "expected %s got %s = %s + %s for add fixed"); + check_binary_op (d, gnc_numeric_add_fixed(z,d), + z, d, "expected %s got %s = %s + %s for add fixed"); + + /* ------------------------------------------------------------ */ + /* Same as above, but with signs reviersed */ + a = c; + b = d; + /* Well, actually 14/24 would be acceptable/better in this case */ + check_binary_op (gnc_numeric_create(-7,12), + gnc_numeric_add(a, b, GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT), + a, b, "expected %s got %s = %s + %s for add exact"); + + check_binary_op (gnc_numeric_create(-58,100), + gnc_numeric_add(a, b, 100, GNC_HOW_RND_ROUND), + a, b, "expected %s got %s = %s + %s for add 100ths (banker's)"); + + check_binary_op (gnc_numeric_create(-5833,10000), + gnc_numeric_add(a, b, GNC_DENOM_AUTO, + GNC_HOW_DENOM_SIGFIGS(4) | + GNC_HOW_RND_ROUND), + a, b, "expected %s got %s = %s + %s for add 4 sig figs"); + + check_binary_op (gnc_numeric_create(-583333,1000000), + gnc_numeric_add(a, b, GNC_DENOM_AUTO, + GNC_HOW_DENOM_SIGFIGS(6) | + GNC_HOW_RND_ROUND), + a, b, "expected %s got %s = %s + %s for add 6 sig figs"); + + check_binary_op (gnc_numeric_create(-1,12), + gnc_numeric_sub(a, b, GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT), + a, b, "expected %s got %s = %s - %s for sub exact"); + + /* We should try something trickier for reduce & lcd */ + check_binary_op (gnc_numeric_create(-1,12), + gnc_numeric_sub(a, b, GNC_DENOM_AUTO, GNC_HOW_DENOM_REDUCE), + a, b, "expected %s got %s = %s - %s for sub reduce"); + + check_binary_op (gnc_numeric_create(-1,12), + gnc_numeric_sub(a, b, GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD), + a, b, "expected %s got %s = %s - %s for sub reduce"); + + check_binary_op (gnc_numeric_create(-8,100), + gnc_numeric_sub(a, b, 100, GNC_HOW_RND_ROUND), + a, b, "expected %s got %s = %s - %s for sub 100ths (banker's)"); + + /* ------------------------------------------------------------ */ #if CHECK_ERRORS_TOO gnc_numeric c; c = gnc_numeric_add_with_error(a, b, 100, GNC_HOW_RND_ROUND, &err); @@ -422,6 +470,7 @@ check_add_subtract (void) #endif + /* ------------------------------------------------------------ */ /* Add and subtract some random numbers */ int i; for (i=0; i