diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2012-05-17 13:07:32 +0200 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2012-05-17 13:07:32 +0200 |
commit | 2b1c7128a3dd46459c71f22c8c80fe0cbda07f8b (patch) | |
tree | c196ff9f4e5f35f74f8868d05c3965344c889805 /tests/mpf | |
parent | 8451386c23ce0bc93ae17631cc23e02393c82175 (diff) | |
download | gmp-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.c | 67 |
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); |