diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2020-06-09 15:37:58 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2020-06-09 15:37:58 +0000 |
commit | 7305aacb301d1c5aa884c7a6dcd44e7b779bbbdf (patch) | |
tree | 72eed094a2a3d40c2c5eb34d9d9a0281adddf223 /tests | |
parent | d513c88b6b5a72b3831195521144d8c620ccd022 (diff) | |
download | mpfr-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.c | 30 |
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); |