summaryrefslogtreecommitdiff
path: root/tests/tget_d.c
diff options
context:
space:
mode:
authordemengeo <demengeo@280ebfd0-de03-0410-8827-d642c229c3f4>2011-02-18 14:53:44 +0000
committerdemengeo <demengeo@280ebfd0-de03-0410-8827-d642c229c3f4>2011-02-18 14:53:44 +0000
commitd9bd5d8903fdf8e22e3f1e84641ce80b44d53e18 (patch)
tree426730a479e28d59c523927637a8618e6509fd88 /tests/tget_d.c
parentdcdbdf36f636ca1cae59936c0ae8bc5f8148848e (diff)
downloadmpfr-d9bd5d8903fdf8e22e3f1e84641ce80b44d53e18.tar.gz
Extend test coverage on mpfr_get_d_2exp function
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@7477 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tests/tget_d.c')
-rw-r--r--tests/tget_d.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/tget_d.c b/tests/tget_d.c
index 05921a28f..9eb72f295 100644
--- a/tests/tget_d.c
+++ b/tests/tget_d.c
@@ -25,6 +25,7 @@ http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
#include <float.h>
#include "mpfr-test.h"
+#include "ieee_floats.h"
static int
check_denorms (void)
@@ -183,6 +184,55 @@ check_min(void)
mpfr_clear(u);
}
+static void
+check_get_d_2exp_inf_nan(void)
+{
+ double var_d;
+ long exp;
+ mpfr_t var;
+
+ // get_d.c : 143-151
+
+ mpfr_init(var);
+
+ mpfr_set_nan(var);
+ var_d = mpfr_get_d_2exp(&exp, var, MPFR_RNDN);
+ if (!isnan(var_d)) {
+ printf("mpfr_get_d_2exp with a NAN mpfr value returned a wrong value : waiting for %g got %g\n", MPFR_DBL_NAN, var_d);
+ exit(1);
+ }
+
+ mpfr_set_zero(var, 1);
+ var_d = mpfr_get_d_2exp(&exp, var, MPFR_RNDN);
+ if ((exp != 0) || (var_d != 0.0)) {
+ printf("mpfr_get_d_2exp with a +0.0 mpfr value returned a wrong value :\n double waiting for 0.0 got %g\n exp waiting for 0 got %g\n", var_d, exp);
+ exit(1);
+ }
+
+ mpfr_set_zero(var, -1);
+ var_d = mpfr_get_d_2exp(&exp, var, MPFR_RNDN);
+ if ((exp != 0) || (var_d != DBL_NEG_ZERO)) {
+ printf("mpfr_get_d_2exp with a +0.0 mpfr value returned a wrong value :\n double waiting for %g got %g\n exp waiting for 0 got %g\n", DBL_NEG_ZERO, var_d, exp);
+ exit(1);
+ }
+
+ mpfr_set_inf(var, 1);
+ var_d = mpfr_get_d_2exp(&exp, var, MPFR_RNDN);
+ if (var_d != MPFR_DBL_INFP) {
+ printf("mpfr_get_d_2exp with a +Inf mpfr value returned a wrong value : waiting for %g got %g\n", MPFR_DBL_INFP, var_d);
+ exit(1);
+ }
+
+ mpfr_set_inf(var, -1);
+ var_d = mpfr_get_d_2exp(&exp, var, MPFR_RNDN);
+ if (var_d != MPFR_DBL_INFM) {
+ printf("mpfr_get_d_2exp with a -Inf mpfr value returned a wrong value : waiting for %g got %g\n", MPFR_DBL_INFM, var_d);
+ exit(1);
+ }
+
+ mpfr_clear(var);
+}
+
int
main (void)
{
@@ -222,6 +272,9 @@ main (void)
check_min();
check_max();
+ check_get_d_2exp_inf_nan();
+
tests_end_mpfr ();
return 0;
}
+