diff options
author | demengeo <demengeo@280ebfd0-de03-0410-8827-d642c229c3f4> | 2011-02-18 14:53:44 +0000 |
---|---|---|
committer | demengeo <demengeo@280ebfd0-de03-0410-8827-d642c229c3f4> | 2011-02-18 14:53:44 +0000 |
commit | d9bd5d8903fdf8e22e3f1e84641ce80b44d53e18 (patch) | |
tree | 426730a479e28d59c523927637a8618e6509fd88 /tests/tget_d.c | |
parent | dcdbdf36f636ca1cae59936c0ae8bc5f8148848e (diff) | |
download | mpfr-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.c | 53 |
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; } + |