summaryrefslogtreecommitdiff
path: root/tests/tdiv.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tdiv.c')
-rw-r--r--tests/tdiv.c54
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;