diff options
-rw-r--r-- | tests/tadd_d.c | 62 | ||||
-rw-r--r-- | tests/td_div.c | 31 | ||||
-rw-r--r-- | tests/td_sub.c | 32 | ||||
-rw-r--r-- | tests/tdiv_d.c | 31 | ||||
-rw-r--r-- | tests/tmul_d.c | 31 | ||||
-rw-r--r-- | tests/tsub_d.c | 31 |
6 files changed, 218 insertions, 0 deletions
diff --git a/tests/tadd_d.c b/tests/tadd_d.c index fb761c67c..b7a051a42 100644 --- a/tests/tadd_d.c +++ b/tests/tadd_d.c @@ -27,6 +27,67 @@ MA 02110-1301, USA. */ #include "mpfr-test.h" static void +check_regulars (void) +{ + mpfr_t x, y, z; + double d; + int inexact; + + /* (1) check with enough precision */ + mpfr_init2 (x, IEEE_DBL_MANT_DIG); + mpfr_init2 (y, IEEE_DBL_MANT_DIG); + mpfr_init2 (z, IEEE_DBL_MANT_DIG); + + mpfr_set_str (y, "4096", 10, GMP_RNDN); + d = 0.125; + mpfr_clear_flags (); + inexact = mpfr_add_d (x, y, d, GMP_RNDN); + if (inexact != 0) + { + printf ("Inexact flag error in mpfr_add_d (1)\n"); + exit (1); + } + mpfr_set_str (z, "4096.125", 10, GMP_RNDN); + if (mpfr_cmp (z, x)) + { + printf ("Error in mpfr_add_d ("); + mpfr_out_str (stdout, 10, 7, y, GMP_RNDN); + printf (" + %.20g)\nexpected ", d); + mpfr_out_str (stdout, 10, 0, z, GMP_RNDN); + printf ("\ngot "); + mpfr_out_str (stdout, 10, 0, x, GMP_RNDN); + printf ("\n"); + exit (1); + } + + /* (2) check inexact flag */ + mpfr_set_prec (x, 2); + mpfr_set_prec (z, 2); + + mpfr_clear_flags (); + inexact = mpfr_add_d (x, y, d, GMP_RNDN); + if (inexact == 0) + { + printf ("Inexact flag error in mpfr_add_d (2)\n"); + exit (1); + } + mpfr_set_str (z, "4096.125", 10, GMP_RNDN); + if (mpfr_cmp (z, x)) + { + printf ("Error in mpfr_add_d ("); + mpfr_out_str (stdout, 10, 0, y, GMP_RNDN); + printf (" + %.20g)\nexpected ", d); + mpfr_out_str (stdout, 10, 0, z, GMP_RNDN); + printf ("\ngot "); + mpfr_out_str (stdout, 10, 0, x, GMP_RNDN); + printf ("\n"); + exit (1); + } + + mpfr_clears (x, y, z, (void *) 0); +} + +static void check_nans (void) { mpfr_t x, y; @@ -67,6 +128,7 @@ main (int argc, char *argv[]) tests_start_mpfr (); check_nans (); + check_regulars (); test_generic (2, 1000, 100); diff --git a/tests/td_div.c b/tests/td_div.c index 530300582..e50f6e6f4 100644 --- a/tests/td_div.c +++ b/tests/td_div.c @@ -69,9 +69,40 @@ check_nans (void) int main (int argc, char *argv[]) { + mpfr_t x, y, z; + double d; + int inexact; MPFR_TEST_USE_RANDS (); tests_start_mpfr (); + /* check with enough precision */ + mpfr_init2 (x, IEEE_DBL_MANT_DIG); + mpfr_init2 (y, IEEE_DBL_MANT_DIG); + mpfr_init2 (z, IEEE_DBL_MANT_DIG); + + mpfr_set_str (y, "4096", 10, GMP_RNDN); + d = 0.125; + mpfr_clear_flags (); + inexact = mpfr_d_div (x, d, y, GMP_RNDN); + if (inexact != 0) + { + printf ("Inexact flag error in mpfr_d_div\n"); + exit (1); + } + mpfr_set_str (z, " 0.000030517578125", 10, GMP_RNDN); + if (mpfr_cmp (z, x)) + { + printf ("Error in mpfr_d_div ("); + mpfr_out_str (stdout, 10, 0, y, GMP_RNDN); + printf (" + %.20g)\nexpected ", d); + mpfr_out_str (stdout, 10, 0, z, GMP_RNDN); + printf ("\ngot "); + mpfr_out_str (stdout, 10, 0, x, GMP_RNDN); + printf ("\n"); + exit (1); + } + mpfr_clears (x, y, z, (void *)0); + check_nans (); test_generic (2, 1000, 100); diff --git a/tests/td_sub.c b/tests/td_sub.c index 732684ea9..a51a8c632 100644 --- a/tests/td_sub.c +++ b/tests/td_sub.c @@ -63,9 +63,41 @@ check_nans (void) int main (int argc, char *argv[]) { + mpfr_t x, y, z; + double d; + int inexact; + MPFR_TEST_USE_RANDS (); tests_start_mpfr (); + /* check with enough precision */ + mpfr_init2 (x, IEEE_DBL_MANT_DIG); + mpfr_init2 (y, IEEE_DBL_MANT_DIG); + mpfr_init2 (z, IEEE_DBL_MANT_DIG); + + mpfr_set_str (y, "4096", 10, GMP_RNDN); + d = 0.125; + mpfr_clear_flags (); + inexact = mpfr_d_sub (x, d, y, GMP_RNDN); + if (inexact != 0) + { + printf ("Inexact flag error in mpfr_d_sub\n"); + exit (1); + } + mpfr_set_str (z, "-4095.875", 10, GMP_RNDN); + if (mpfr_cmp (z, x)) + { + printf ("Error in mpfr_d_sub ("); + mpfr_out_str (stdout, 10, 7, y, GMP_RNDN); + printf (" + %.20g)\nexpected ", d); + mpfr_out_str (stdout, 10, 0, z, GMP_RNDN); + printf ("\ngot "); + mpfr_out_str (stdout, 10, 0, x, GMP_RNDN); + printf ("\n"); + exit (1); + } + mpfr_clears (x, y, z, (void *)0); + check_nans (); test_generic (2, 1000, 100); diff --git a/tests/tdiv_d.c b/tests/tdiv_d.c index de2ca21a4..5ca08da9a 100644 --- a/tests/tdiv_d.c +++ b/tests/tdiv_d.c @@ -68,9 +68,40 @@ check_nans (void) int main (int argc, char *argv[]) { + mpfr_t x, y, z; + double d; + int inexact; MPFR_TEST_USE_RANDS (); tests_start_mpfr (); + /* check with enough precision */ + mpfr_init2 (x, IEEE_DBL_MANT_DIG); + mpfr_init2 (y, IEEE_DBL_MANT_DIG); + mpfr_init2 (z, IEEE_DBL_MANT_DIG); + + mpfr_set_str (y, "4096", 10, GMP_RNDN); + d = 0.125; + mpfr_clear_flags (); + inexact = mpfr_div_d (x, y, d, GMP_RNDN); + if (inexact != 0) + { + printf ("Inexact flag error in mpfr_div_d\n"); + exit (1); + } + mpfr_set_str (z, "32768", 10, GMP_RNDN); + if (mpfr_cmp (z, x)) + { + printf ("Error in mpfr_div_d ("); + mpfr_out_str (stdout, 10, 0, y, GMP_RNDN); + printf (" + %.20g)\nexpected ", d); + mpfr_out_str (stdout, 10, 0, z, GMP_RNDN); + printf ("\ngot "); + mpfr_out_str (stdout, 10, 0, x, GMP_RNDN); + printf ("\n"); + exit (1); + } + mpfr_clears (x, y, z, (void *)0); + check_nans (); test_generic (2, 1000, 100); diff --git a/tests/tmul_d.c b/tests/tmul_d.c index 19e61953b..e524679fa 100644 --- a/tests/tmul_d.c +++ b/tests/tmul_d.c @@ -67,9 +67,40 @@ check_nans (void) int main (int argc, char *argv[]) { + mpfr_t x, y, z; + double d; + int inexact; MPFR_TEST_USE_RANDS (); tests_start_mpfr (); + /* check with enough precision */ + mpfr_init2 (x, IEEE_DBL_MANT_DIG); + mpfr_init2 (y, IEEE_DBL_MANT_DIG); + mpfr_init2 (z, IEEE_DBL_MANT_DIG); + + mpfr_set_str (y, "4096", 10, GMP_RNDN); + d = 0.125; + mpfr_clear_flags (); + inexact = mpfr_mul_d (x, y, d, GMP_RNDN); + if (inexact != 0) + { + printf ("Inexact flag error in mpfr_mul_d\n"); + exit (1); + } + mpfr_set_str (z, "512", 10, GMP_RNDN); + if (mpfr_cmp (z, x)) + { + printf ("Error in mpfr_mul_d ("); + mpfr_out_str (stdout, 10, 0, y, GMP_RNDN); + printf (" + %.20g)\nexpected ", d); + mpfr_out_str (stdout, 10, 0, z, GMP_RNDN); + printf ("\ngot "); + mpfr_out_str (stdout, 10, 0, x, GMP_RNDN); + printf ("\n"); + exit (1); + } + mpfr_clears (x, y, z, (void *)0); + check_nans (); test_generic (2, 1000, 100); diff --git a/tests/tsub_d.c b/tests/tsub_d.c index 2bfd4e194..983286a45 100644 --- a/tests/tsub_d.c +++ b/tests/tsub_d.c @@ -63,9 +63,40 @@ check_nans (void) int main (int argc, char *argv[]) { + mpfr_t x, y, z; + double d; + int inexact; MPFR_TEST_USE_RANDS (); tests_start_mpfr (); + /* check with enough precision */ + mpfr_init2 (x, IEEE_DBL_MANT_DIG); + mpfr_init2 (y, IEEE_DBL_MANT_DIG); + mpfr_init2 (z, IEEE_DBL_MANT_DIG); + + mpfr_set_str (y, "4096", 10, GMP_RNDN); + d = 0.125; + mpfr_clear_flags (); + inexact = mpfr_sub_d (x, y, d, GMP_RNDN); + if (inexact != 0) + { + printf ("Inexact flag error in mpfr_sub_d\n"); + exit (1); + } + mpfr_set_str (z, "4095.875", 10, GMP_RNDN); + if (mpfr_cmp (z, x)) + { + printf ("Error in mpfr_sub_d ("); + mpfr_out_str (stdout, 10, 7, y, GMP_RNDN); + printf (" + %.20g)\nexpected ", d); + mpfr_out_str (stdout, 10, 0, z, GMP_RNDN); + printf ("\ngot "); + mpfr_out_str (stdout, 10, 0, x, GMP_RNDN); + printf ("\n"); + exit (1); + } + mpfr_clears (x, y, z, (void *)0); + check_nans (); test_generic (2, 1000, 100); |