summaryrefslogtreecommitdiff
path: root/tests/tfmma.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2018-06-05 14:37:16 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2018-06-05 14:37:16 +0000
commitda3ae74a454e984c27c0a519df91331163ed8a4a (patch)
treea5a13ca0a38648306225df0a74956c27d2fcb0c7 /tests/tfmma.c
parentdc649320c447e334b2960cd9d06c3bc01f06cab5 (diff)
downloadmpfr-da3ae74a454e984c27c0a519df91331163ed8a4a.tar.gz
[tests/tfmma.c] improve coverage of the UBF case in mpfr_sub
(now coverage of sub.c is 100%) git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@12759 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'tests/tfmma.c')
-rw-r--r--tests/tfmma.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/tests/tfmma.c b/tests/tfmma.c
index 75fd20f87..18fe478df 100644
--- a/tests/tfmma.c
+++ b/tests/tfmma.c
@@ -509,21 +509,47 @@ underflow_tests (void)
static void
bug20180604 (void)
{
- mpfr_t x, y, z;
+ mpfr_t x, y, yneg, z;
mpfr_exp_t emin;
+ int ret;
emin = mpfr_get_emin ();
mpfr_set_emin (-1073741821);
- mpfr_inits2 (564, x, y, (mpfr_ptr) 0);
+ mpfr_inits2 (564, x, y, yneg, (mpfr_ptr) 0);
mpfr_init2 (z, 2256);
mpfr_set_str_binary (x, "1.10010000111100110011001101111111101000111001011000110100110010000101000100010001000000111100010000101001011011111001111000110101111100101111001100001100011101100100011110000000011000010110111100111000100101010001011111010111011001110010001011101111001011001110110000010000011100010001010001011100100110111110101001001111001011101111110011101110101010110100010010111011111100010101111100011110111001011111101110101101101110100101111010000101011110100000000110111101000001100001000100010110100111010011011010110011100111010000101110010101111001011100110101100001100E-737194993");
mpfr_set_str_binary (y, "-1.00101000100001001101011110100010110011101010011011010111100110101011111100000100101000111010111101100100110010001110011011100100110110000001011001000111101111101111110101100110111000000011000001101001010100010010001110001000011010000100111001001100101111111100010101110101001101101101111010100011011110001000010000010100011000011000010110101100000111111110111001100100100001101011111011100101110111000100101010110100010011101010110010100110100111000000100111101101101000000011110000100110100100011000010011110010001010000110100011111101101101110001110001101101010E-737194903");
+
mpfr_clear_underflow ();
- mpfr_fmms (z, x, x, y, y, MPFR_RNDN);
+ ret = mpfr_fmms (z, x, x, y, y, MPFR_RNDN);
MPFR_ASSERTN(mpfr_underflow_p ());
MPFR_ASSERTN(mpfr_zero_p (z));
MPFR_ASSERTN(mpfr_signbit (z) == 1);
- mpfr_clears (x, y, z, (mpfr_ptr) 0);
+ MPFR_ASSERTN(ret > 0);
+
+ mpfr_clear_underflow ();
+ ret = mpfr_fmms (z, y, y, x, x, MPFR_RNDN);
+ MPFR_ASSERTN(mpfr_underflow_p ());
+ MPFR_ASSERTN(mpfr_zero_p (z));
+ MPFR_ASSERTN(mpfr_signbit (z) == 0);
+ MPFR_ASSERTN(ret < 0);
+
+ mpfr_neg (yneg, y, MPFR_RNDN);
+ mpfr_clear_underflow ();
+ ret = mpfr_fmms (z, x, x, y, yneg, MPFR_RNDN);
+ MPFR_ASSERTN(mpfr_underflow_p ());
+ MPFR_ASSERTN(mpfr_zero_p (z));
+ MPFR_ASSERTN(mpfr_signbit (z) == 0);
+ MPFR_ASSERTN(ret < 0);
+
+ mpfr_clear_underflow ();
+ ret = mpfr_fmms (z, y, yneg, x, x, MPFR_RNDN);
+ MPFR_ASSERTN(mpfr_underflow_p ());
+ MPFR_ASSERTN(mpfr_zero_p (z));
+ MPFR_ASSERTN(mpfr_signbit (z) == 1);
+ MPFR_ASSERTN(ret > 0);
+
+ mpfr_clears (x, y, yneg, z, (mpfr_ptr) 0);
mpfr_set_emin (emin);
}