summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2015-08-25 22:10:40 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2015-08-25 22:10:40 +0000
commit6be650199fce2d5daca288d66451c99d2c799a7e (patch)
tree29271bd87ee60f2b93faf250a844423ff58c5c3b
parenta3364df1c08e93f4210de8dfb578b68701a2c375 (diff)
downloadmpfr-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.c67
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);