summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2012-02-24 17:42:00 +0100
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2012-02-24 17:42:00 +0100
commit7a978371d5d3b6d7a1f307b25960443c0138c274 (patch)
treeca34d584285945535339cc3c506f0a86402f5b43
parentbef2a8f26b2b42fe2be47c34d472435117bae9ac (diff)
downloadgmp-7a978371d5d3b6d7a1f307b25960443c0138c274.tar.gz
tests/mpz/t-invert.c: test format, range, and correctes of the "no-inverse" answer.
-rw-r--r--tests/mpz/t-invert.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/tests/mpz/t-invert.c b/tests/mpz/t-invert.c
index 754b2ab74..b9822c078 100644
--- a/tests/mpz/t-invert.c
+++ b/tests/mpz/t-invert.c
@@ -56,9 +56,6 @@ main (int argc, char **argv)
mpz_urandomb (bs, rands, size_range);
mpz_rrandomb (m, rands, mpz_get_ui (bs));
- if (mpz_sgn (m) == 0)
- continue;
-
mpz_urandomb (bs, rands, 8);
bsi = mpz_get_ui (bs);
@@ -70,6 +67,17 @@ main (int argc, char **argv)
r = mpz_invert (ainv, a, m);
if (r != 0)
{
+ MPZ_CHECK_FORMAT (ainv);
+
+ if (mpz_cmp_ui (ainv, 0) <= 0 || mpz_cmpabs (ainv, m) > 0)
+ {
+ fprintf (stderr, "ERROR in test %d\n", test);
+ gmp_fprintf (stderr, "Inverse out of range.\n");
+ gmp_fprintf (stderr, "a = %Zx\n", a);
+ gmp_fprintf (stderr, "m = %Zx\n", m);
+ abort ();
+ }
+
mpz_mul (t, ainv, a);
mpz_mod (t, t, m);
@@ -82,6 +90,21 @@ main (int argc, char **argv)
abort ();
}
}
+ else /* Inverse deos not exist */
+ {
+ if (mpz_cmpabs_ui (m, 1) <= 0)
+ continue; /* OK */
+
+ mpz_gcd (t, a, m);
+ if (mpz_cmp_ui (t, 1) == 0)
+ {
+ fprintf (stderr, "ERROR in test %d\n", test);
+ gmp_fprintf (stderr, "Inverse exists, but was not found.\n");
+ gmp_fprintf (stderr, "a = %Zx\n", a);
+ gmp_fprintf (stderr, "m = %Zx\n", m);
+ abort ();
+ }
+ }
}
mpz_clear (bs);