[Gnucash-changes] more tests for the lcd

Linas Vepstas linas at cvs.gnucash.org
Sat Jun 26 01:03:07 EDT 2004


Log Message:
-----------
more tests for the lcd

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.7
retrieving revision 1.8
diff -Lsrc/engine/test/test-numeric.c -Lsrc/engine/test/test-numeric.c -u -r1.7 -r1.8
--- src/engine/test/test-numeric.c
+++ src/engine/test/test-numeric.c
@@ -90,23 +90,6 @@
   printf("7/16 as float: %e\n",
          gnc_numeric_to_double(gnc_numeric_create(7, 16)));
   
-  printf("100023234 / 334216654 reduced: %s\n",
-         gnc_numeric_print(gnc_numeric_reduce(gnc_numeric_create(10023234LL,
-                                                                 334216654LL))));
-  printf("2^10*3^10*17^2 / 2^8*3^12 reduced: %s\n",
-         gnc_numeric_print
-         (gnc_numeric_reduce(gnc_numeric_create(17474724864LL,
-                                                136048896LL))));
-  printf("1024 / 1024^4 reduced: %s\n",
-         gnc_numeric_print
-         (gnc_numeric_reduce(gnc_numeric_create(1024LL,
-                                                1099511627776LL))));
-  printf("reducing 100,000 times:\n\n");
-  for(i = 0; i < 100000; i++) {
-    gnc_numeric_reduce(gnc_numeric_create(17474724864LL,
-                                          136048896LL));
-  }
-  
   printf("add LCM: %s + %s = %s\n",
          gnc_numeric_print(b), gnc_numeric_print(d),
          gnc_numeric_print(gnc_numeric_add(b, d, GNC_DENOM_AUTO,
@@ -161,7 +144,7 @@
 /* Make sure that the equivalence operator we use for 
  * later tests actually works */
 static void
-check_equality_operator (void)
+check_eq_operator (void)
 {
 	gnc_numeric a = gnc_numeric_create (42, 58);
 	gnc_numeric b = gnc_numeric_create (42, 58);
@@ -171,8 +154,12 @@
 	do_test (gnc_numeric_eq(a, a), "expected self-equivalence");
 	do_test (gnc_numeric_eq(a, b), "expected equivalence");
 	do_test (0 == gnc_numeric_eq(a, c), "expected inequivalence");
+}
 
 
+static void
+check_reduce (void)
+{
 	/* Check common factor elimination (needed for equality checks) */
 	gnc_numeric one = gnc_numeric_create (1,1);
 	gnc_numeric rone = gnc_numeric_create (1000000,1000000);
@@ -184,6 +171,31 @@
 	rfour = gnc_numeric_reduce (rfour);
 	do_test (gnc_numeric_eq(four, rfour), "reduce to four");
 
+	gnc_numeric val = gnc_numeric_create(10023234LL, 334216654LL);
+	gnc_numeric rval = gnc_numeric_reduce (val);
+	check_unary_op (gnc_numeric_eq,
+	                gnc_numeric_create (5011617,167108327),
+	                rval,
+                   val, "expected %s = %s = reduce(%s)");
+
+	val = gnc_numeric_create(17474724864LL,136048896LL);
+	rval = gnc_numeric_reduce (val);
+	check_unary_op (gnc_numeric_eq,
+	                gnc_numeric_create (4*17*17,9),
+	                rval,
+                   val, "expected %s = %s = reduce(%s)");
+
+	val = gnc_numeric_create(1024LL,1099511627776LL);
+	rval = gnc_numeric_reduce (val);
+	check_unary_op (gnc_numeric_eq,
+	                gnc_numeric_create (1,1024*1024*1024),
+	                rval,
+                   val, "expected %s = %s = reduce(%s)");
+}
+
+static void
+check_equality_operator (void)
+{
 	/* Check equality operator for some large numer/denom values */
 	gint64 numer = 1<<30;
 	numer <<= 30;   /* we don't trust cpp to compute 1<<60 correctly */
@@ -451,6 +463,8 @@
 static void
 run_test (void)
 {
+	check_eq_operator ();
+	check_reduce ();
 	check_equality_operator ();
 	check_rounding();
 	check_add_subtract();


More information about the gnucash-changes mailing list