mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
add random division checks
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@10092 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
d58064d16a
commit
68b43e3be6
@ -15,7 +15,7 @@
|
|||||||
#include "test-engine-stuff.h"
|
#include "test-engine-stuff.h"
|
||||||
#include "gnc-numeric.h"
|
#include "gnc-numeric.h"
|
||||||
|
|
||||||
#define NREPS 1000
|
#define NREPS 2000
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
gnc_numeric_print(gnc_numeric in)
|
gnc_numeric_print(gnc_numeric in)
|
||||||
@ -489,7 +489,7 @@ check_mult_div (void)
|
|||||||
a, b, "expected %s got %s = %s * %s for multiply");
|
a, b, "expected %s got %s = %s * %s for multiply");
|
||||||
|
|
||||||
/* Multiply some random numbers. This test presumes that
|
/* Multiply some random numbers. This test presumes that
|
||||||
* RAND_MAX is less than 2^32
|
* RAND_MAX is approx 2^32
|
||||||
*/
|
*/
|
||||||
int i;
|
int i;
|
||||||
for (i=0; i<NREPS; i++)
|
for (i=0; i<NREPS; i++)
|
||||||
@ -510,6 +510,8 @@ check_mult_div (void)
|
|||||||
check_binary_op (gnc_numeric_create(ne,1),
|
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");
|
a, b, "expected %s got %s = %s * %s for mult exact");
|
||||||
|
|
||||||
|
/* Force 128-bit math to come into play */
|
||||||
int j;
|
int j;
|
||||||
for (j=1; j<31; j++)
|
for (j=1; j<31; j++)
|
||||||
{
|
{
|
||||||
@ -517,10 +519,30 @@ check_mult_div (void)
|
|||||||
b = gnc_numeric_create(nb << j, 1<<j);
|
b = gnc_numeric_create(nb << j, 1<<j);
|
||||||
check_binary_op (gnc_numeric_create(ne, 1),
|
check_binary_op (gnc_numeric_create(ne, 1),
|
||||||
gnc_numeric_mul(a, b, GNC_DENOM_AUTO, GNC_DENOM_REDUCE),
|
gnc_numeric_mul(a, b, GNC_DENOM_AUTO, GNC_DENOM_REDUCE),
|
||||||
a, b, "expected %s got %s = %s * %s for mult exact");
|
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");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================================================= */
|
/* ======================================================= */
|
||||||
|
Loading…
Reference in New Issue
Block a user