summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2020-02-09 14:14:15 +0100
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2020-02-09 14:14:15 +0100
commit72da84bbf466de39ccb010f3792a79d7bad3b075 (patch)
treed16c93d4d013079fb419f237b6fe5e831eae19d5 /tests
parent10113c964bcb085b63fbda718dce226d064d59da (diff)
downloadgmp-72da84bbf466de39ccb010f3792a79d7bad3b075.tar.gz
tests/mpz/t-nextprime.c: Split in sub-tests, with new (disabled) ones, by Seth Troisi.
Diffstat (limited to 'tests')
-rw-r--r--tests/mpz/t-nextprime.c125
1 files changed, 94 insertions, 31 deletions
diff --git a/tests/mpz/t-nextprime.c b/tests/mpz/t-nextprime.c
index 5607aea05..67c880765 100644
--- a/tests/mpz/t-nextprime.c
+++ b/tests/mpz/t-nextprime.c
@@ -33,6 +33,60 @@ refmpz_nextprime (mpz_ptr p, mpz_srcptr t)
}
void
+test_largegap (mpz_t low, const int gap)
+{
+ mpz_t t, nxt;
+
+ mpz_init (t);
+ mpz_init (nxt);
+
+ mpz_nextprime(nxt, low);
+ mpz_sub(t, nxt, low);
+
+ if (mpz_cmp_ui(t, gap) != 0)
+ {
+ gmp_printf ("prime gap %Zd != %d\n", t, gap);
+ abort ();
+ }
+
+ mpz_clear (t);
+ mpz_clear (nxt);
+}
+
+void
+test_largegaps ()
+{
+ mpz_t x;
+
+ mpz_init (x);
+
+ // This takes ~3 seconds on a fast computer.
+ // Gap 33008 from P454 = 55261931 * 1063#/210 - 13116
+ mpz_primorial_ui (x, 1063);
+ mpz_mul_ui (x, x, 55261931);
+ mpz_divexact_ui (x, x, 210);
+ mpz_sub_ui (x, x, 13116);
+
+ test_largegap(x, 33008);
+
+ mpz_clear (x);
+
+
+ /*
+ // This takes ~30 seconds, it test the deep science magic constant in
+ // nextprime.c but takes too long to be always enabled.
+ // Gap 66520 from P816 = 1931 * 1933# / 7230 - 30244
+ mpz_primorial_ui (x, 1933);
+ mpz_mul_ui (x, x, 1931);
+ mpz_divexact_ui (x, x, 7230);
+ mpz_sub_ui (x, x, 30244);
+
+ test_largegap(x, 66520);
+ */
+
+}
+
+void
run (const char *start, int reps, const char *end, short diffs[])
{
mpz_t x, y;
@@ -73,17 +127,51 @@ extern short diff4[];
extern short diff5[];
extern short diff6[];
+void
+test_ref(gmp_randstate_ptr rands, int reps) {
+ int i;
+ mpz_t bs, x, next_p, ref_next_p;
+ unsigned long size_range;
+
+ mpz_init (bs);
+ mpz_init (x);
+ mpz_init (next_p);
+ mpz_init (ref_next_p);
+
+ for (i = 0; i < reps; i++)
+ {
+ mpz_urandomb (bs, rands, 32);
+ size_range = mpz_get_ui (bs) % 8 + 2; /* 0..1024 bit operands */
+
+ mpz_urandomb (bs, rands, size_range);
+ mpz_rrandomb (x, rands, mpz_get_ui (bs));
+
+/* gmp_printf ("%ld: %Zd\n", mpz_sizeinbase (x, 2), x); */
+
+ mpz_nextprime (next_p, x);
+ refmpz_nextprime (ref_next_p, x);
+ if (mpz_cmp (next_p, ref_next_p) != 0)
+ abort ();
+ }
+
+ mpz_clear (bs);
+ mpz_clear (x);
+ mpz_clear (next_p);
+ mpz_clear (ref_next_p);
+}
+
int
main (int argc, char **argv)
{
- int i;
- int reps = 20;
gmp_randstate_ptr rands;
- mpz_t bs, x, nxtp, ref_nxtp;
- unsigned long size_range;
+ int reps = 20;
tests_start();
+
rands = RANDS;
+ TESTS_REPS (reps, argv, argc);
+
+ test_ref(rands, reps);
run ("2", 1000, "0x1ef7", diff1);
@@ -101,33 +189,8 @@ main (int argc, char **argv)
run ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80", 50, /* 2^128 - 128 */
"0x10000000000000000000000000000155B", diff6);
- mpz_init (bs);
- mpz_init (x);
- mpz_init (nxtp);
- mpz_init (ref_nxtp);
-
- TESTS_REPS (reps, argv, argc);
-
- for (i = 0; i < reps; i++)
- {
- mpz_urandomb (bs, rands, 32);
- size_range = mpz_get_ui (bs) % 8 + 2; /* 0..1024 bit operands */
-
- mpz_urandomb (bs, rands, size_range);
- mpz_rrandomb (x, rands, mpz_get_ui (bs));
-
-/* gmp_printf ("%ld: %Zd\n", mpz_sizeinbase (x, 2), x); */
-
- mpz_nextprime (nxtp, x);
- refmpz_nextprime (ref_nxtp, x);
- if (mpz_cmp (nxtp, ref_nxtp) != 0)
- abort ();
- }
-
- mpz_clear (bs);
- mpz_clear (x);
- mpz_clear (nxtp);
- mpz_clear (ref_nxtp);
+ // Too slow to include in normal testing.
+ //test_largegaps ();
tests_end ();
return 0;