diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2018-02-17 12:53:46 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2018-02-17 12:53:46 +0000 |
commit | 2bb722757f45d508ee2cf227ef8c6a93d4392b0f (patch) | |
tree | d90218ba2a14f125f5c00df626ef6a385725a81f /tests/tsqrt.c | |
parent | 915f9eda1e824bb5c4c96feff7472888e960a0c9 (diff) | |
download | mpfr-2bb722757f45d508ee2cf227ef8c6a93d4392b0f.tar.gz |
[tests/tsqrt.c] improved coverage
[src/sqrt.c] added comments
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@12292 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tests/tsqrt.c')
-rw-r--r-- | tests/tsqrt.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/tsqrt.c b/tests/tsqrt.c index 42c05a9a1..572874824 100644 --- a/tests/tsqrt.c +++ b/tests/tsqrt.c @@ -726,6 +726,39 @@ check_overflow (void) mpfr_set_emax (emax); } +static void +check_underflow (void) +{ + mpfr_t r, u; + mpfr_prec_t p; + mpfr_exp_t emin; + 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_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 */ + inex = mpfr_sqrt (r, u, MPFR_RNDN); + MPFR_ASSERTN(inex > 0); + MPFR_ASSERTN(mpfr_equal_p (r, u)); + /* for RNDA, the result should be u */ + inex = mpfr_sqrt (r, u, MPFR_RNDA); + MPFR_ASSERTN(inex > 0); + MPFR_ASSERTN(mpfr_equal_p (r, u)); + /* for RNDZ, the result should be +0 */ + inex = mpfr_sqrt (r, u, MPFR_RNDZ); + MPFR_ASSERTN(inex < 0); + MPFR_ASSERTN(mpfr_zero_p (r) && mpfr_signbit (r) == 0); + mpfr_clear (r); + mpfr_clear (u); + } + mpfr_set_emin (emin); +} + #define TEST_FUNCTION test_sqrt #define TEST_RANDOM_POS 8 #include "tgeneric.c" @@ -738,6 +771,7 @@ main (void) tests_start_mpfr (); + check_underflow (); check_overflow (); testall_rndf (16); for (p = MPFR_PREC_MIN; p <= 128; p++) |