[Gnucash-changes] add more equality tests
Linas Vepstas
linas at cvs.gnucash.org
Fri Jun 25 20:16:51 EDT 2004
Log Message:
-----------
add more equality tests
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.3
retrieving revision 1.4
diff -Lsrc/engine/test/test-numeric.c -Lsrc/engine/test/test-numeric.c -u -r1.3 -r1.4
--- src/engine/test/test-numeric.c
+++ src/engine/test/test-numeric.c
@@ -245,15 +245,46 @@
rfour = gnc_numeric_reduce (rfour);
do_test (gnc_numeric_eq(four, rfour), "reduce to four");
+ /* Check equality operator for some large nuer/denom values */
+ gint64 numer = 1<<30;
+ numer <<= 30; /* we don't trust cpp to compute 1<<60 correctly */
+ gint64 deno = 1<<30;
+ deno <<= 20;
+ gnc_numeric rbig = gnc_numeric_create (numer, deno);
+ gnc_numeric big = gnc_numeric_create (1<<10,1);
+ do_test (gnc_numeric_equal(big, rbig), "equal to billion");
+
+ big = gnc_numeric_create (1<<20,1<<10);
+ do_test (gnc_numeric_equal(big, rbig), "equal to 1<<20/1<<10");
+
+ big = gnc_numeric_create (1<<30,1<<20);
+ do_test (gnc_numeric_equal(big, rbig), "equal to 1<<30/1<<20");
+
+ numer = 1<<30;
+ numer <<= 30; /* we don't trust cpp to compute 1<<60 correctly */
+ deno = 1<<30;
+ rbig = gnc_numeric_create (numer, deno);
+
+ big = gnc_numeric_create (1<<30,1);
+ do_test (gnc_numeric_equal(big, rbig), "equal to 1<<30");
+
+ numer = 1<<30;
+ numer <<= 10;
+ big = gnc_numeric_create (numer, 1<<10);
+ do_test (gnc_numeric_equal(big, rbig), "equal to 1<<40/1<<10");
+
+ numer <<= 10;
+ big = gnc_numeric_create (numer, 1<<20);
+ do_test (gnc_numeric_equal(big, rbig), "equal to 1<<50/1<<20");
+
int i;
- /* lim keeps denominotor in the range of 2^30 */
- gint64 lim = RAND_MAX / (1<<15);
+ /* We assume RAND_MAX is less that 1<<32 */
for (i=0; i<NREPS; i++)
{
- gint64 deno = rand() / lim;
- gint64 mult = rand() / lim;
- gint64 numer = get_random_gint64() / (1<<16);
+ gint64 deno = rand() / 2;
+ gint64 mult = rand() / 2;
+ gint64 numer = rand() / 2;
gnc_numeric val = gnc_numeric_create (numer, deno);
gnc_numeric mval = gnc_numeric_create (numer*mult, deno*mult);
More information about the gnucash-changes
mailing list