diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2016-05-30 05:57:51 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2016-05-30 05:57:51 +0000 |
commit | 5ede19526edf011fcf24983cc6f7b91d32a2bead (patch) | |
tree | 69a9fcab593017b58707d75dc33f5df8f15c397e /tests/tdiv.c | |
parent | cf11a3eb08d62789a6fdc3347da236c3c389743f (diff) | |
download | mpfr-5ede19526edf011fcf24983cc6f7b91d32a2bead.tar.gz |
more work on the faithful branch
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/faithful@10385 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tests/tdiv.c')
-rw-r--r-- | tests/tdiv.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/tests/tdiv.c b/tests/tdiv.c index 772ce745a..eb46a004d 100644 --- a/tests/tdiv.c +++ b/tests/tdiv.c @@ -29,6 +29,8 @@ check_equal (mpfr_srcptr a, mpfr_srcptr a2, char *s, if ((MPFR_IS_NAN (a) && MPFR_IS_NAN (a2)) || mpfr_equal_p (a, a2)) return; + if (r == MPFR_RNDF) /* RNDF might return different values */ + return; printf ("Error in %s\n", mpfr_print_rnd_mode (r)); printf ("b = "); mpfr_dump (b); @@ -88,7 +90,7 @@ mpfr_all_div (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t r) { __gmpfr_flags = oldflags; inex2 = mpfr_div_ui (a2, b, mpfr_get_ui (c, MPFR_RNDN), r); - MPFR_ASSERTN (SAME_SIGN (inex2, inex)); + MPFR_ASSERTN (r == MPFR_RNDF || SAME_SIGN (inex2, inex)); MPFR_ASSERTN (__gmpfr_flags == newflags); check_equal (a, a2, "mpfr_div_ui", b, c, r); } @@ -96,7 +98,7 @@ mpfr_all_div (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t r) { __gmpfr_flags = oldflags; inex2 = mpfr_div_si (a2, b, mpfr_get_si (c, MPFR_RNDN), r); - MPFR_ASSERTN (SAME_SIGN (inex2, inex)); + MPFR_ASSERTN (r == MPFR_RNDF || SAME_SIGN (inex2, inex)); MPFR_ASSERTN (__gmpfr_flags == newflags); check_equal (a, a2, "mpfr_div_si", b, c, r); } @@ -412,6 +414,9 @@ check_hard (void) { RND_LOOP(rnd) { + if (rnd == MPFR_RNDF) + continue; /* inexact is undefined */ + inex = test_div (q, u, v, (mpfr_rnd_t) rnd); inex2 = get_inexact (q, u, v); if (inex_cmp (inex, inex2)) @@ -676,7 +681,8 @@ check_inexact (void) mpfr_set_prec (y, py); mpfr_set_prec (z, py + pu); { - rnd = RND_RAND (); + /* inexact is undefined for RNDF */ + do rnd = RND_RAND (); while (rnd == MPFR_RNDF); inexact = test_div (y, x, u, rnd); if (mpfr_mul (z, y, u, rnd)) { @@ -975,7 +981,8 @@ consistency (void) mpfr_prec_t px, py, pz, p; int inex1, inex2; - rnd = RND_RAND (); + /* inex is undefined for RNDF */ + do rnd = RND_RAND (); while (rnd == MPFR_RNDF); px = (randlimb () % 256) + 2; py = (randlimb () % 128) + 2; pz = (randlimb () % 256) + 2; @@ -1000,7 +1007,8 @@ consistency (void) MPFR_ASSERTN (!MPFR_IS_NAN (z2)); if (inex1 != inex2 || mpfr_cmp (z1, z2) != 0) { - printf ("Consistency error for i = %d\n", i); + printf ("Consistency error for i = %d (rnd = %s)\n", i, + mpfr_print_rnd_mode (rnd)); exit (1); } } |