summaryrefslogtreecommitdiff
path: root/tests/tsqrt.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2018-02-17 12:53:46 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2018-02-17 12:53:46 +0000
commit2bb722757f45d508ee2cf227ef8c6a93d4392b0f (patch)
treed90218ba2a14f125f5c00df626ef6a385725a81f /tests/tsqrt.c
parent915f9eda1e824bb5c4c96feff7472888e960a0c9 (diff)
downloadmpfr-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.c34
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++)