summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2020-06-09 15:37:58 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2020-06-09 15:37:58 +0000
commit7305aacb301d1c5aa884c7a6dcd44e7b779bbbdf (patch)
tree72eed094a2a3d40c2c5eb34d9d9a0281adddf223 /tests
parentd513c88b6b5a72b3831195521144d8c620ccd022 (diff)
downloadmpfr-7305aacb301d1c5aa884c7a6dcd44e7b779bbbdf.tar.gz
[tests/tmul_ui.c] Added an overflow check that fails in MPFR_RNDZ with
mini-gmp and mp_limb_t < long (e.g. "-DMINI_GMP_LIMB_TYPE=short"). git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@13953 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tests')
-rw-r--r--tests/tmul_ui.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/tests/tmul_ui.c b/tests/tmul_ui.c
index 9800f1726..f912fdcd4 100644
--- a/tests/tmul_ui.c
+++ b/tests/tmul_ui.c
@@ -87,9 +87,12 @@ main (int argc, char *argv[])
unsigned int xprec, yprec, i;
mpfr_prec_t p;
mpfr_exp_t emax;
+ int r;
tests_start_mpfr ();
+ emax = mpfr_get_emax ();
+
for (p=2; p<100; p++)
for (i=1; i<50; i++)
check_inexact (p);
@@ -145,7 +148,6 @@ main (int argc, char *argv[])
mpfr_mul_ui (x, x, 0, MPFR_RNDU);
MPFR_ASSERTN(mpfr_cmp_ui (x, 0) == 0 && MPFR_IS_POS(x));
- emax = mpfr_get_emax ();
set_emax (0);
mpfr_set_str_binary (x, "0.1E0");
(mpfr_mul_ui) (x, x, 2, MPFR_RNDN);
@@ -279,6 +281,32 @@ main (int argc, char *argv[])
exit (1);
}
+ set_emax (MPFR_EMAX_MAX);
+ mpfr_set_prec (x, 32);
+ mpfr_set_prec (y, 96);
+ mpfr_set_inf (x, 1);
+ mpfr_nextbelow (x);
+ RND_LOOP (r)
+ {
+ mpfr_flags_t ex_flags, flags;
+
+ ex_flags = MPFR_FLAGS_OVERFLOW | MPFR_FLAGS_INEXACT;
+ mpfr_clear_flags ();
+ mpfr_mul_ui (y, x, 123, (mpfr_rnd_t) r);
+ flags = __gmpfr_flags;
+ if (flags != ex_flags)
+ {
+ printf ("Error in overflow check for %s\n",
+ mpfr_print_rnd_mode ((mpfr_rnd_t) r));
+ printf ("Expected flags:");
+ flags_out (ex_flags);
+ printf ("Got: ");
+ flags_out (flags);
+ exit (1);
+ }
+ }
+ set_emax (emax);
+
mpfr_clear(x);
mpfr_clear(y);