diff options
Diffstat (limited to 'tests/tdiv.c')
-rw-r--r-- | tests/tdiv.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/tdiv.c b/tests/tdiv.c index b1f184e11..39cab385f 100644 --- a/tests/tdiv.c +++ b/tests/tdiv.c @@ -1008,6 +1008,9 @@ consistency (void) { printf ("Consistency error for i = %d (rnd = %s)\n", i, mpfr_print_rnd_mode (rnd)); + printf ("inex1=%d inex2=%d\n", inex1, inex2); + printf ("z1="); mpfr_dump (z1); + printf ("z2="); mpfr_dump (z2); exit (1); } } @@ -1361,6 +1364,55 @@ testall_rndf (mpfr_prec_t pmax) } } +static void +test_mpfr_divsp2 (void) +{ + mpfr_t u, v, q; + + /* test to exercise r2 = v1 in mpfr_divsp2 */ + mpfr_init2 (u, 128); + mpfr_init2 (v, 128); + mpfr_init2 (q, 83); + + mpfr_set_str (u, "286677858044426991425771529092412636160", 10, MPFR_RNDN); + mpfr_set_str (v, "241810647971575979588130185988987264768", 10, MPFR_RNDN); + mpfr_div (q, u, v, MPFR_RNDN); + mpfr_set_str (u, "5732952910203749289426944", 10, MPFR_RNDN); + mpfr_div_2exp (u, u, 82, MPFR_RNDN); + MPFR_ASSERTN(mpfr_equal_p (q, u)); + + mpfr_clear (u); + mpfr_clear (v); + mpfr_clear (q); +} + +/* Assertion failure in r10769 with --enable-assert --enable-gmp-internals + (same failure in tatan on a similar example). */ +static void +test_20160831 (void) +{ + mpfr_t u, v, q; + + mpfr_inits2 (124, u, v, q, (mpfr_ptr) 0); + + mpfr_set_ui (u, 1, MPFR_RNDN); + mpfr_set_str (v, "0x40000000000000005", 16, MPFR_RNDN); + mpfr_div (q, u, v, MPFR_RNDN); + mpfr_set_str (u, "0xfffffffffffffffecp-134", 16, MPFR_RNDN); + MPFR_ASSERTN (mpfr_equal_p (q, u)); + + mpfr_set_prec (u, 128); + mpfr_set_prec (v, 128); + mpfr_set_str (u, "186127091671619245460026015088243485690", 10, MPFR_RNDN); + mpfr_set_str (v, "205987256581218236405412302590110119580", 10, MPFR_RNDN); + mpfr_div (q, u, v, MPFR_RNDN); + mpfr_set_str (u, "19217137613667309953639458782352244736", 10, MPFR_RNDN); + mpfr_div_2exp (u, u, 124, MPFR_RNDN); + MPFR_ASSERTN (mpfr_equal_p (q, u)); + + mpfr_clears (u, v, q, (mpfr_ptr) 0); +} + int main (int argc, char *argv[]) { @@ -1388,9 +1440,11 @@ main (int argc, char *argv[]) test_20070603 (); test_20070628 (); test_20151023 (); + test_20160831 (); test_generic (MPFR_PREC_MIN, 800, 50); test_bad (); test_extreme (); + test_mpfr_divsp2 (); tests_end_mpfr (); return 0; |