summaryrefslogtreecommitdiff
path: root/tests/texceptions.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2016-05-28 04:59:39 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2016-05-28 04:59:39 +0000
commitcf11a3eb08d62789a6fdc3347da236c3c389743f (patch)
treebee39cc3ec584c505e659c2b6a6fc2af81d16ec9 /tests/texceptions.c
parented11b5b94687c1a0cefe59f2e899c6e6f08ff589 (diff)
downloadmpfr-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.c44
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));