diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2018-02-18 12:31:53 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2018-02-18 12:31:53 +0000 |
commit | e6cc16d1a60f2797f80ff28736aa2a506c15d349 (patch) | |
tree | 5757c628b0aa638a567606e7f46b89944bf8dacb /tests/tsqrt.c | |
parent | 3ec0c276eed5d455109eb5d4b1ab6f7e84178fc8 (diff) | |
download | mpfr-e6cc16d1a60f2797f80ff28736aa2a506c15d349.tar.gz |
[tests/tsqrt.c] improve coverage
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@12295 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tests/tsqrt.c')
-rw-r--r-- | tests/tsqrt.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/tests/tsqrt.c b/tests/tsqrt.c index 6d86e5ba2..b1841415a 100644 --- a/tests/tsqrt.c +++ b/tests/tsqrt.c @@ -735,11 +735,12 @@ check_underflow (void) int inex; emin = mpfr_get_emin (); - mpfr_set_emin (2); for (p = MPFR_PREC_MIN; p <= 1024; p++) { mpfr_init2 (r, p); mpfr_init2 (u, p); + + mpfr_set_emin (2); mpfr_set_ui_2exp (u, 1, mpfr_get_emin () - 1, MPFR_RNDN); /* u = 2 */ /* for RNDN, since sqrt(2) is closer from 2 than 0, the result is 2 */ mpfr_clear_flags (); @@ -825,6 +826,34 @@ check_underflow (void) MPFR_ASSERTN(mpfr_cmp_ui_2exp (r, 1, mpfr_get_emin () - 1) == 0); MPFR_ASSERTN(mpfr_underflow_p ()); + mpfr_set_emin (3); + mpfr_set_ui_2exp (u, 1, mpfr_get_emin () - 1, MPFR_RNDN); /* u = 4 */ + /* sqrt(u) = 2 = 0.5^2^(emin-1) should be rounded to +0 */ + mpfr_clear_flags (); + inex = mpfr_sqrt (r, u, MPFR_RNDN); + MPFR_ASSERTN(inex < 0); + MPFR_ASSERTN(mpfr_zero_p (r) && mpfr_signbit (r) == 0); + MPFR_ASSERTN(mpfr_underflow_p ()); + + /* next number */ + mpfr_set_ui_2exp (u, 1, mpfr_get_emin () - 1, MPFR_RNDN); /* u = 4 */ + mpfr_nextabove (u); + /* sqrt(u) should be rounded to 4 */ + mpfr_clear_flags (); + inex = mpfr_sqrt (r, u, MPFR_RNDN); + MPFR_ASSERTN(inex > 0); + MPFR_ASSERTN(mpfr_cmp_ui (r, 4) == 0); + MPFR_ASSERTN(mpfr_underflow_p ()); + + mpfr_set_emin (4); + mpfr_set_ui_2exp (u, 1, mpfr_get_emin () - 1, MPFR_RNDN); /* u = 8 */ + /* sqrt(u) should be rounded to +0 */ + mpfr_clear_flags (); + inex = mpfr_sqrt (r, u, MPFR_RNDN); + MPFR_ASSERTN(inex < 0); + MPFR_ASSERTN(mpfr_zero_p (r) && mpfr_signbit (r) == 0); + MPFR_ASSERTN(mpfr_underflow_p ()); + mpfr_clear (r); mpfr_clear (u); } |