Skip math.sum tests on non IEEE 754 platforms, and on IEEE 754 platforms
that exhibit the problem described in issue #2937.
diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py
index cc30081..095e657 100644
--- a/Lib/test/test_math.py
+++ b/Lib/test/test_math.py
@@ -631,6 +631,22 @@
self.assert_(math.isnan(math.sqrt(NAN)))
def testSum(self):
+ # math.sum relies on exact rounding for correct operation.
+ # There's a known problem with IA32 floating-point that causes
+ # inexact rounding in some situations, and will cause the
+ # math.sum tests below to fail; see issue #2937. On non IEEE
+ # 754 platforms, and on IEEE 754 platforms that exhibit the
+ # 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.999 != 1e16+2.9999:
+ return
+
# Python version of math.sum algorithm, for comparison
def msum(iterable):
"""Full precision sum of values in iterable. Returns the value of