diff options
author | Torbjorn Granlund <tege@gmplib.org> | 2013-01-18 17:18:57 +0100 |
---|---|---|
committer | Torbjorn Granlund <tege@gmplib.org> | 2013-01-18 17:18:57 +0100 |
commit | 8df224c186fc394cc7abe05ec82345d47bc3b2a0 (patch) | |
tree | 797db9ae9f8350e22fbe07df11c6c97475484fe2 /mini-gmp | |
parent | 55e8d7a9768b0adc502da4ea19e9b3749b2414e5 (diff) | |
download | gmp-8df224c186fc394cc7abe05ec82345d47bc3b2a0.tar.gz |
Test also mpz_mod, mpz_mod_ui. Compare mpz_divisible_p just to ceil, to save time.
Diffstat (limited to 'mini-gmp')
-rw-r--r-- | mini-gmp/tests/t-div.c | 76 |
1 files changed, 62 insertions, 14 deletions
diff --git a/mini-gmp/tests/t-div.c b/mini-gmp/tests/t-div.c index 6fb1a6114..64e353d01 100644 --- a/mini-gmp/tests/t-div.c +++ b/mini-gmp/tests/t-div.c @@ -128,14 +128,45 @@ main (int argc, char **argv) abort (); } - div_p = mpz_divisible_p (a, b); - if ((mpz_sgn (r) == 0) ^ (div_p != 0)) + if (j == 0) /* do this once, not for all roundings */ { - fprintf (stderr, "mpz_divisible_p failed:\n"); - dump ("a", a); - dump ("b", b); - dump ("r ", r); - abort (); + div_p = mpz_divisible_p (a, b); + if ((mpz_sgn (r) == 0) ^ (div_p != 0)) + { + fprintf (stderr, "mpz_divisible_p failed:\n"); + dump ("a", a); + dump ("b", b); + dump ("r ", r); + abort (); + } + } + + if (j == 0 && mpz_sgn (b) < 0) /* ceil, negative divisor */ + { + mpz_mod (r, a, b); + if (mpz_cmp (r, rr)) + { + fprintf (stderr, "mpz_mod failed:\n", name[j]); + dump ("a", a); + dump ("b", b); + dump ("r ", r); + dump ("rref", rr); + abort (); + } + } + + if (j == 1 && mpz_sgn (b) > 0) /* floor, positive divisor */ + { + mpz_mod (r, a, b); + if (mpz_cmp (r, rr)) + { + fprintf (stderr, "mpz_mod failed:\n", name[j]); + dump ("a", a); + dump ("b", b); + dump ("r ", r); + dump ("rref", rr); + abort (); + } } if (mpz_fits_ulong_p (b)) @@ -195,14 +226,31 @@ main (int argc, char **argv) abort (); } - div_p = mpz_divisible_ui_p (a, mpz_get_ui (b)); - if ((mpz_sgn (r) == 0) ^ (div_p != 0)) + if (j == 0) /* do this once, not for all roundings */ { - fprintf (stderr, "mpz_divisible_ui_p failed:\n"); - dump ("a", a); - dump ("b", b); - dump ("r ", r); - abort (); + div_p = mpz_divisible_ui_p (a, mpz_get_ui (b)); + if ((mpz_sgn (r) == 0) ^ (div_p != 0)) + { + fprintf (stderr, "mpz_divisible_ui_p failed:\n"); + dump ("a", a); + dump ("b", b); + dump ("r ", r); + abort (); + } + } + + if (j == 1) /* floor */ + { + mpz_mod_ui (r, a, mpz_get_ui (b)); + if (mpz_cmp (r, rr)) + { + fprintf (stderr, "mpz_mod failed:\n", name[j]); + dump ("a", a); + dump ("b", b); + dump ("r ", r); + dump ("rref", rr); + abort (); + } } } } |