summaryrefslogtreecommitdiff
path: root/tests/mpf
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2012-05-17 13:07:32 +0200
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2012-05-17 13:07:32 +0200
commit2b1c7128a3dd46459c71f22c8c80fe0cbda07f8b (patch)
treec196ff9f4e5f35f74f8868d05c3965344c889805 /tests/mpf
parent8451386c23ce0bc93ae17631cc23e02393c82175 (diff)
downloadgmp-2b1c7128a3dd46459c71f22c8c80fe0cbda07f8b.tar.gz
tests/mpf/t-set.c (check_random): New check, both set and init_set.
Diffstat (limited to 'tests/mpf')
-rw-r--r--tests/mpf/t-set.c67
1 files changed, 64 insertions, 3 deletions
diff --git a/tests/mpf/t-set.c b/tests/mpf/t-set.c
index 48336a890..ff79b2381 100644
--- a/tests/mpf/t-set.c
+++ b/tests/mpf/t-set.c
@@ -1,6 +1,6 @@
-/* Test mpf_set.
+/* Test mpf_set, mpf_init_set.
-Copyright 2004 Free Software Foundation, Inc.
+Copyright 2004, 2012 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@@ -40,12 +40,73 @@ check_reuse (void)
mpf_clear (f);
}
+void
+check_random (long reps)
+{
+ unsigned long test;
+ gmp_randstate_ptr rands;
+ mpf_t a, b;
+ mpz_t z;
+ int precbits;
+
+#define PRECBITS 10
+
+ rands = RANDS;
+
+ mpz_init (z);
+ mpf_init2 (a, 1 << PRECBITS);
+
+ for (test = 0; test < reps; test++)
+ {
+ mpz_urandomb (z, rands, PRECBITS);
+ precbits = mpz_get_ui (z) + 1;
+ mpz_urandomb (z, rands, precbits);
+ mpz_setbit (z, precbits - 1); /* make sure msb is set */
+ mpf_set_z (a, z);
+ mpz_urandomb (z, rands, PRECBITS);
+ mpf_div_2exp (a, a, mpz_get_ui (z) + 1);
+ mpz_urandomb (z, rands, PRECBITS);
+ precbits -= mpz_get_ui (z);
+ if (precbits <= 0)
+ precbits = 1 - precbits;
+ mpf_set_default_prec (precbits);
+
+ mpf_init_set (b, a);
+ MPF_CHECK_FORMAT (b);
+ if (!mpf_eq (a, b, precbits))
+ {
+ printf ("mpf_init_set wrong.\n");
+ abort();
+ }
+
+ mpf_set_ui (b, 0);
+ mpf_set (b, a);
+ MPF_CHECK_FORMAT (b);
+ if (!mpf_eq (a, b, precbits))
+ {
+ printf ("mpf_set wrong.\n");
+ abort();
+ }
+
+ mpf_clear (b);
+ }
+
+ mpf_clear (a);
+ mpz_clear (z);
+}
+
int
-main (void)
+main (int argc, char *argv[])
{
+ long reps = 10000;
+
+ if (argc == 2)
+ reps = strtol (argv[1], 0, 0);
+
tests_start ();
check_reuse ();
+ check_random (reps);
tests_end ();
exit (0);