diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2015-08-25 22:10:40 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2015-08-25 22:10:40 +0000 |
commit | 6be650199fce2d5daca288d66451c99d2c799a7e (patch) | |
tree | 29271bd87ee60f2b93faf250a844423ff58c5c3b | |
parent | a3364df1c08e93f4210de8dfb578b68701a2c375 (diff) | |
download | mpfr-6be650199fce2d5daca288d66451c99d2c799a7e.tar.gz |
[tests/tget_z.c] Flags testing.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@9667 280ebfd0-de03-0410-8827-d642c229c3f4
-rw-r--r-- | tests/tget_z.c | 67 |
1 files changed, 46 insertions, 21 deletions
diff --git a/tests/tget_z.c b/tests/tget_z.c index 8df5a3524..76d3cace4 100644 --- a/tests/tget_z.c +++ b/tests/tget_z.c @@ -151,34 +151,59 @@ special (void) int inex; mpfr_t x; mpz_t z; - int i; + int i, fi; + int rnd; mpfr_exp_t e; + mpfr_flags_t flags[3] = { 0, MPFR_FLAGS_ALL ^ MPFR_FLAGS_ERANGE, + MPFR_FLAGS_ALL }, ex_flags, gt_flags; mpfr_init2 (x, 2); mpz_init (z); - for (i = -1; i <= 1; i++) - { - if (i != 0) - mpfr_set_nan (x); - else - mpfr_set_inf (x, i); - mpfr_clear_flags (); - inex = mpfr_get_z (z, x, MPFR_RNDN); - if (!mpfr_erangeflag_p () || inex != 0 || mpz_cmp_ui (z, 0) != 0) - { - printf ("special() failed on mpfr_get_z for i = %d\n", i); - exit (1); - } - mpfr_clear_flags (); - e = mpfr_get_z_2exp (z, x); - if (!mpfr_erangeflag_p () || e != __gmpfr_emin || - mpz_cmp_ui (z, 0) != 0) + RND_LOOP (rnd) + for (i = -1; i <= 1; i++) + for (fi = 0; fi < numberof (flags); fi++) { - printf ("special() failed on mpfr_get_z_2exp for i = %d\n", i); - exit (1); + ex_flags = flags[fi] | MPFR_FLAGS_ERANGE; + if (i != 0) + mpfr_set_nan (x); + else + mpfr_set_inf (x, i); + __gmpfr_flags = flags[fi]; + inex = mpfr_get_z (z, x, (mpfr_rnd_t) rnd); + gt_flags = __gmpfr_flags; + if (gt_flags != ex_flags || inex != 0 || mpz_cmp_ui (z, 0) != 0) + { + printf ("special() failed on mpfr_get_z" + " for %s, i = %d, fi = %d\n", + mpfr_print_rnd_mode ((mpfr_rnd_t) rnd), i, fi); + printf ("Expected z = 0, inex = 0,"); + flags_out (ex_flags); + printf ("Got z = "); + mpz_out_str (stdout, 10, z); + printf (", inex = %d,", inex); + flags_out (gt_flags); + exit (1); + } + __gmpfr_flags = flags[fi]; + e = mpfr_get_z_2exp (z, x); + gt_flags = __gmpfr_flags; + if (gt_flags != ex_flags || e != __gmpfr_emin || + mpz_cmp_ui (z, 0) != 0) + { + printf ("special() failed on mpfr_get_z_2exp" + " for %s, i = %d, fi = %d\n", + mpfr_print_rnd_mode ((mpfr_rnd_t) rnd), i, fi); + printf ("Expected z = 0, e = %" MPFR_EXP_FSPEC "d,", + (mpfr_eexp_t) __gmpfr_emin); + flags_out (ex_flags); + printf ("Got z = "); + mpz_out_str (stdout, 10, z); + printf (", e = %" MPFR_EXP_FSPEC "d,", (mpfr_eexp_t) e); + flags_out (gt_flags); + exit (1); + } } - } mpfr_clear (x); mpz_clear (z); |