From 83df68ece4d8d6638c826cba1e75f24f6ab7b364 Mon Sep 17 00:00:00 2001 From: vlefevre Date: Sun, 22 May 2016 10:05:37 +0000 Subject: For mpfr_add_ui and mpfr_sub_ui, make sure that all the expected flags are set (in practice, only NaN was affected). Added testcases from the trunk (merged r10298 and r10303). Note: the trunk was fixed with a partial rewrite for some optimization and to improve consistency, but here, the changes are kept minimal. git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/3.1@10304 280ebfd0-de03-0410-8827-d642c229c3f4 --- src/add_ui.c | 1 + src/sub_ui.c | 1 + tests/tadd_ui.c | 2 ++ tests/tsub_ui.c | 2 ++ 4 files changed, 6 insertions(+) diff --git a/src/add_ui.c b/src/add_ui.c index 49c6752a0..700ca6f94 100644 --- a/src/add_ui.c +++ b/src/add_ui.c @@ -49,6 +49,7 @@ mpfr_add_ui (mpfr_ptr y, mpfr_srcptr x, unsigned long int u, mpfr_rnd_t rnd_mode MPFR_SAVE_EXPO_MARK (expo); MPFR_SET_EXP (uu, GMP_NUMB_BITS - cnt); inex = mpfr_add(y, x, uu, rnd_mode); + MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, __gmpfr_flags); MPFR_SAVE_EXPO_FREE (expo); return mpfr_check_range(y, inex, rnd_mode); } diff --git a/src/sub_ui.c b/src/sub_ui.c index b366970eb..718db0a43 100644 --- a/src/sub_ui.c +++ b/src/sub_ui.c @@ -52,6 +52,7 @@ mpfr_sub_ui (mpfr_ptr y, mpfr_srcptr x, unsigned long int u, mpfr_rnd_t rnd_mode MPFR_SAVE_EXPO_MARK (expo); MPFR_SET_EXP (uu, GMP_NUMB_BITS - cnt); inex = mpfr_sub (y, x, uu, rnd_mode); + MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, __gmpfr_flags); MPFR_SAVE_EXPO_FREE (expo); return mpfr_check_range (y, inex, rnd_mode); } diff --git a/tests/tadd_ui.c b/tests/tadd_ui.c index 422629fee..796a31499 100644 --- a/tests/tadd_ui.c +++ b/tests/tadd_ui.c @@ -69,7 +69,9 @@ check_nans (void) /* nan + 2394875 == nan */ mpfr_set_nan (x); + mpfr_clear_nanflag (); mpfr_add_ui (y, x, 2394875L, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nanflag_p ()); MPFR_ASSERTN (mpfr_nan_p (y)); /* +inf + 2394875 == +inf */ diff --git a/tests/tsub_ui.c b/tests/tsub_ui.c index 653689575..6b5c34f47 100644 --- a/tests/tsub_ui.c +++ b/tests/tsub_ui.c @@ -96,7 +96,9 @@ check_nans (void) /* nan - 1 == nan */ mpfr_set_nan (x); + mpfr_clear_nanflag (); mpfr_sub_ui (y, x, 1L, MPFR_RNDN); + MPFR_ASSERTN (mpfr_nanflag_p ()); MPFR_ASSERTN (mpfr_nan_p (y)); /* +inf - 1 == +inf */ -- cgit v1.2.1