diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2016-05-28 04:59:39 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2016-05-28 04:59:39 +0000 |
commit | cf11a3eb08d62789a6fdc3347da236c3c389743f (patch) | |
tree | bee39cc3ec584c505e659c2b6a6fc2af81d16ec9 /tests/texceptions.c | |
parent | ed11b5b94687c1a0cefe59f2e899c6e6f08ff589 (diff) | |
download | mpfr-cf11a3eb08d62789a6fdc3347da236c3c389743f.tar.gz |
start implementing RNDF (work in progress)
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/faithful@10380 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tests/texceptions.c')
-rw-r--r-- | tests/texceptions.c | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/tests/texceptions.c b/tests/texceptions.c index dbd877885..cc8c91e96 100644 --- a/tests/texceptions.c +++ b/tests/texceptions.c @@ -56,10 +56,10 @@ check_default_rnd (void) } } mpfr_set_default_rounding_mode ((mpfr_rnd_t) MPFR_RND_MAX); - if (mpfr_get_default_rounding_mode() != MPFR_RNDA) + if (mpfr_get_default_rounding_mode() != MPFR_RNDF) ERROR("ERROR in setting / getting default rounding mode (2)"); mpfr_set_default_rounding_mode((mpfr_rnd_t) -1); - if (mpfr_get_default_rounding_mode() != MPFR_RNDA) + if (mpfr_get_default_rounding_mode() != MPFR_RNDF) ERROR("ERROR in setting / getting default rounding mode (3)"); } @@ -210,7 +210,25 @@ test_set_underflow (void) j = s < 0 && i > 1 ? 5 - i : i; inex = mpfr_underflow (x, (mpfr_rnd_t) i, s); - if (mpfr_cmp (x, r[j]) || inex * t[j] <= 0) + /* for RNDF, inex has no meaning, just check that x is either + min or zero */ + if (i == MPFR_RNDF) + { + if (mpfr_cmp (x, min) && mpfr_cmp (x, zero)) + { + printf ("Error in test_set_underflow, sign = %d," + " rnd_mode = %s\n", s, mpfr_print_rnd_mode ((mpfr_rnd_t) i)); + printf ("Got\n"); + mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); + printf ("\ninstead of\n"); + mpfr_out_str (stdout, 2, 0, zero, MPFR_RNDN); + printf ("\nor\n"); + mpfr_out_str (stdout, 2, 0, min, MPFR_RNDN); + printf ("\n"); + exit (1); + } + } + else if (mpfr_cmp (x, r[j]) || inex * t[j] <= 0) { printf ("Error in test_set_underflow, sign = %d," " rnd_mode = %s\n", s, mpfr_print_rnd_mode ((mpfr_rnd_t) i)); @@ -252,7 +270,25 @@ test_set_overflow (void) j = s < 0 && i > 1 ? 5 - i : i; inex = mpfr_overflow (x, (mpfr_rnd_t) i, s); - if (mpfr_cmp (x, r[j]) || inex * t[j] <= 0) + /* for RNDF, inex has no meaning, just check that x is either + max or inf */ + if (i == MPFR_RNDF) + { + if (mpfr_cmp (x, max) && mpfr_cmp (x, inf)) + { + printf ("Error in test_set_overflow, sign = %d," + " rnd_mode = %s\n", s, mpfr_print_rnd_mode ((mpfr_rnd_t) i)); + printf ("Got\n"); + mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN); + printf ("\ninstead of\n"); + mpfr_out_str (stdout, 2, 0, max, MPFR_RNDN); + printf ("\nor\n"); + mpfr_out_str (stdout, 2, 0, inf, MPFR_RNDN); + printf ("\n"); + exit (1); + } + } + else if (mpfr_cmp (x, r[j]) || inex * t[j] <= 0) { printf ("Error in test_set_overflow, sign = %d," " rnd_mode = %s\n", s, mpfr_print_rnd_mode ((mpfr_rnd_t) i)); |