summaryrefslogtreecommitdiff
path: root/mini-gmp
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gmplib.org>2013-01-18 17:18:57 +0100
committerTorbjorn Granlund <tege@gmplib.org>2013-01-18 17:18:57 +0100
commit8df224c186fc394cc7abe05ec82345d47bc3b2a0 (patch)
tree797db9ae9f8350e22fbe07df11c6c97475484fe2 /mini-gmp
parent55e8d7a9768b0adc502da4ea19e9b3749b2414e5 (diff)
downloadgmp-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.c76
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 ();
+ }
}
}
}