mirror of https://github.com/python/cpython
Merged revisions 71837-71838 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r71837 | mark.dickinson | 2009-04-24 17:34:14 +0100 (Fri, 24 Apr 2009) | 4 lines Issue #5593: Use more robust test for double-rounding in test_fsum. While we're at it, use new unittest.skipUnless decorator to implement skipping for that test. ........ r71838 | mark.dickinson | 2009-04-24 17:37:22 +0100 (Fri, 24 Apr 2009) | 2 lines Remove unnecessary double negative ........
This commit is contained in:
parent
d4d95f8eac
commit
5c56708f68
|
@ -13,6 +13,11 @@ NAN = float('nan')
|
|||
INF = float('inf')
|
||||
NINF = float('-inf')
|
||||
|
||||
# detect evidence of double-rounding: fsum is not always correctly
|
||||
# rounded on machines that suffer from double rounding.
|
||||
x, y = 1e16, 2.9999 # use temporary values to defeat peephole optimizer
|
||||
HAVE_DOUBLE_ROUNDING = (x + y == 1e16 + 4)
|
||||
|
||||
# locate file with test values
|
||||
if __name__ == '__main__':
|
||||
file = sys.argv[0]
|
||||
|
@ -359,6 +364,10 @@ class MathTests(unittest.TestCase):
|
|||
self.assertEquals(math.frexp(NINF)[0], NINF)
|
||||
self.assert_(math.isnan(math.frexp(NAN)[0]))
|
||||
|
||||
@unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
|
||||
"test requires IEEE 754 doubles")
|
||||
@unittest.skipIf(HAVE_DOUBLE_ROUNDING,
|
||||
"fsum is not exact on machines with double rounding")
|
||||
def testFsum(self):
|
||||
# math.fsum relies on exact rounding for correct operation.
|
||||
# There's a known problem with IA32 floating-point that causes
|
||||
|
@ -368,14 +377,6 @@ class MathTests(unittest.TestCase):
|
|||
# problem described in issue #2937, we simply skip the whole
|
||||
# test.
|
||||
|
||||
if not float.__getformat__("double").startswith("IEEE"):
|
||||
return
|
||||
|
||||
# on IEEE 754 compliant machines, both of the expressions
|
||||
# below should round to 10000000000000002.0.
|
||||
if 1e16+2.0 != 1e16+2.9999:
|
||||
return
|
||||
|
||||
# Python version of math.fsum, for comparison. Uses a
|
||||
# different algorithm based on frexp, ldexp and integer
|
||||
# arithmetic.
|
||||
|
|
Loading…
Reference in New Issue