summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Zimmermann <Paul.Zimmermann@inria.fr>2020-02-06 10:27:59 +0100
committerPaul Zimmermann <Paul.Zimmermann@inria.fr>2020-02-06 10:27:59 +0100
commit1c139609e3964aa219a26c2d0fc12895cc767790 (patch)
tree3da0de1d6763f005d44ed5e042cc3696f1cf6ac1
parent11e7dbb0f0a3dc37db1fce79c5c23ae63053dc8c (diff)
downloadmpc-git-1c139609e3964aa219a26c2d0fc12895cc767790.tar.gz
[tdiv.c] added new test with reduced exponent range (currently fails)
-rw-r--r--tests/tdiv.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/tdiv.c b/tests/tdiv.c
index 51ffb39..66d32ea 100644
--- a/tests/tdiv.c
+++ b/tests/tdiv.c
@@ -31,11 +31,50 @@ along with this program. If not, see http://www.gnu.org/licenses/ .
#include "data_check.tpl"
#include "tgeneric.tpl"
+static void
+bug20200206 (void)
+{
+ mpfr_exp_t emin = mpfr_get_emin ();
+ mpfr_exp_t emax = mpfr_get_emax ();
+ mpc_t x, y, z, zr;
+
+ mpfr_set_emin (-1073);
+ mpfr_set_emax (0);
+ mpc_init2 (x, 53);
+ mpc_init2 (y, 53);
+ mpc_init2 (z, 53);
+ mpc_init2 (zr, 53);
+ mpfr_set_d (mpc_realref (x), -5.3310997889069899e-216, MPFR_RNDN);
+ mpfr_set_d (mpc_imagref (x), -4.9188093228194944e-89, MPFR_RNDN);
+ mpfr_set_d (mpc_realref (y), -3.6801500191882962e-14, MPFR_RNDN);
+ mpfr_set_d (mpc_imagref (y), 4.5420247980297260e-145, MPFR_RNDN);
+ printf ("emin=%ld emax=%ld\n", mpfr_get_emin (), mpfr_get_emax ());
+ mpc_div (z, x, y, MPC_RNDNN);
+ /* quotient is 1.44844440684571e-202 + 1.33657848108714e-75*I,
+ where both the real and imaginary parts fit in the exponent range */
+ mpfr_set_d (mpc_realref (zr), 0x2.d69b18295a8cep-672, MPFR_RNDN);
+ mpfr_set_d (mpc_imagref (zr), 0x9.ac3e51d39eea8p-252, MPFR_RNDN);
+ if (mpc_cmp (z, zr))
+ {
+ printf ("Incorrect division with reduced exponent range:\n");
+ mpfr_printf ("Expected (%Re,%Re)\n", mpc_realref (zr), mpc_imagref (zr));
+ mpfr_printf ("Got (%Re,%Re)\n", mpc_realref (z), mpc_imagref (z));
+ exit (1);
+ }
+ mpc_clear (x);
+ mpc_clear (y);
+ mpc_clear (z);
+ mpc_clear (zr);
+ mpfr_set_emin (emin);
+ mpfr_set_emax (emax);
+}
+
int
main (void)
{
test_start ();
+ bug20200206 ();
data_check_template ("div.dsc", "div.dat");
tgeneric_template ("div.dsc", 2, 1024, 7, 4096);