[Gnucash-changes] adding a negative number to zero flips its sign! Oops!! Add a test to

Linas Vepstas linas at cvs.gnucash.org
Thu Jul 1 23:00:03 EDT 2004


Log Message:
-----------
adding a negative number to zero flips its sign! Oops!!
Add a test to make sure it never happens again.

Modified Files:
--------------
    gnucash/src/engine/test:
        test-numeric.c

Revision Data
-------------
Index: test-numeric.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/test/test-numeric.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -Lsrc/engine/test/test-numeric.c -Lsrc/engine/test/test-numeric.c -u -r1.14 -r1.15
--- src/engine/test/test-numeric.c
+++ src/engine/test/test-numeric.c
@@ -337,6 +337,26 @@
 /* ======================================================= */
 
 static void
+check_neg (void)
+{
+	gnc_numeric a = gnc_numeric_create(2, 6);
+	gnc_numeric b = gnc_numeric_create(1, 4);
+	gnc_numeric c = gnc_numeric_neg (a);
+	gnc_numeric d = gnc_numeric_neg (b);
+
+	check_unary_op (gnc_numeric_eq,
+	                gnc_numeric_create (-2,6), c, 
+                   a, "expected %s = %s = -(%s)");
+
+	check_unary_op (gnc_numeric_eq,
+	                gnc_numeric_create (-1,4), d, 
+                   b, "expected %s = %s = -(%s)");
+
+}
+
+/* ======================================================= */
+
+static void
 check_add_subtract (void)
 {
   gnc_numeric a = gnc_numeric_create(2, 6);
@@ -380,6 +400,12 @@
                    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 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");
+  
 #if CHECK_ERRORS_TOO
   gnc_numeric c;
   c = gnc_numeric_add_with_error(a, b, 100, GNC_HOW_RND_ROUND, &err);
@@ -608,6 +634,7 @@
 	check_equality_operator ();
 	check_rounding();
 	check_double();
+	check_neg();
 	check_add_subtract();
 	check_mult_div ();
 }


More information about the gnucash-changes mailing list