summaryrefslogtreecommitdiff
path: root/tests/tsqrt.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tsqrt.c')
-rw-r--r--tests/tsqrt.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/tsqrt.c b/tests/tsqrt.c
index 17d05c3..15f9888 100644
--- a/tests/tsqrt.c
+++ b/tests/tsqrt.c
@@ -28,11 +28,45 @@ along with this program. If not, see http://www.gnu.org/licenses/ .
#include "data_check.tpl"
#include "tgeneric.tpl"
+/* check with reduced exponent range */
+static void
+bug20200207 (void)
+{
+ mpfr_exp_t emin = mpfr_get_emin ();
+ mpfr_exp_t emax = mpfr_get_emax ();
+ mpc_t x, z, zr;
+
+ mpfr_set_emin (-148);
+ mpfr_set_emax (128);
+ mpc_init2 (x, 24);
+ mpc_init2 (z, 24);
+ mpc_init2 (zr, 24);
+ mpfr_set_d (mpc_realref (x), -1.89432151320234e24, MPFR_RNDN);
+ mpfr_set_d (mpc_imagref (x), -1.06397209600000e9, MPFR_RNDN);
+ mpc_sqrt (z, x, MPC_RNDNN);
+ /* square root is 0.00038652126908433 - 1.37634353022868e12*I */
+ mpfr_set_d (mpc_realref (zr), 0.00038652126908433, MPFR_RNDN);
+ mpfr_set_d (mpc_imagref (zr), -1.37634353022868e12, MPFR_RNDN);
+ if (mpc_cmp (z, zr))
+ {
+ printf ("Incorrect square root 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 (z);
+ mpc_clear (zr);
+ mpfr_set_emin (emin);
+ mpfr_set_emax (emax);
+}
+
int
main (void)
{
test_start ();
+ bug20200207 ();
data_check_template ("sqrt.dsc", "sqrt.dat");
tgeneric_template ("sqrt.dsc", 2, 1024, 7, 256);