[Gnucash-changes] add random division checks
Linas Vepstas
linas at cvs.gnucash.org
Sat Jun 26 02:39:39 EDT 2004
Log Message:
-----------
add random division checks
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.9
retrieving revision 1.10
diff -Lsrc/engine/test/test-numeric.c -Lsrc/engine/test/test-numeric.c -u -r1.9 -r1.10
--- src/engine/test/test-numeric.c
+++ src/engine/test/test-numeric.c
@@ -15,7 +15,7 @@
#include "test-engine-stuff.h"
#include "gnc-numeric.h"
-#define NREPS 1000
+#define NREPS 2000
static char *
gnc_numeric_print(gnc_numeric in)
@@ -489,8 +489,8 @@
a, b, "expected %s got %s = %s * %s for multiply");
/* Multiply some random numbers. This test presumes that
- * RAND_MAX is less than 2^32
- */
+ * RAND_MAX is approx 2^32
+ */
int i;
for (i=0; i<NREPS; i++)
{
@@ -508,19 +508,41 @@
b = gnc_numeric_create(nb, deno);
check_binary_op (gnc_numeric_create(ne,1),
- gnc_numeric_mul(a, b, GNC_DENOM_AUTO, GNC_DENOM_EXACT),
+ gnc_numeric_mul(a, b, GNC_DENOM_AUTO, GNC_DENOM_EXACT),
a, b, "expected %s got %s = %s * %s for mult exact");
+
+ /* Force 128-bit math to come into play */
int j;
for (j=1; j<31; j++)
{
a = gnc_numeric_create(na << j, 1<<j);
b = gnc_numeric_create(nb << j, 1<<j);
check_binary_op (gnc_numeric_create(ne, 1),
- gnc_numeric_mul(a, b, GNC_DENOM_AUTO, GNC_DENOM_REDUCE),
- a, b, "expected %s got %s = %s * %s for mult exact");
+ gnc_numeric_mul(a, b, GNC_DENOM_AUTO, GNC_DENOM_REDUCE),
+ a, b, "expected %s got %s = %s * %s for mult reduce");
}
- }
+ /* Do some hokey random 128-bit division too */
+ b = gnc_numeric_create(deno, nb);
+
+ check_binary_op (gnc_numeric_create(ne,1),
+ gnc_numeric_div(a, b, GNC_DENOM_AUTO, GNC_DENOM_EXACT),
+ a, b, "expected %s got %s = %s / %s for div exact");
+
+ /* avoid overflow; */
+ na /= 2;
+ nb /= 2;
+ ne = na*nb;
+ for (j=1; j<16; j++)
+ {
+ a = gnc_numeric_create(na << j, 1<<j);
+ b = gnc_numeric_create(1<<j, nb << j);
+ check_binary_op (gnc_numeric_create(ne, 1),
+ gnc_numeric_div(a, b, GNC_DENOM_AUTO, GNC_DENOM_REDUCE),
+ a, b, "expected %s got %s = %s / %s for div reduce");
+ }
+
+ }
}
/* ======================================================= */
More information about the gnucash-changes
mailing list