From 2985dbb52613f97b982987f980c765781c00e657 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Fri, 18 Sep 2009 21:01:50 +0000 Subject: [PATCH] Use skipUnless to skip math module tests on non-IEEE 754 platforms. --- Lib/test/test_math.py | 65 ++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index 3abb84a4f48..a9032d4784f 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -13,6 +13,11 @@ NAN = float('nan') INF = float('inf') NINF = float('-inf') +# decorator for skipping tests on non-IEEE 754 platforms +requires_IEEE_754 = unittest.skipUnless( + float.__getformat__("double").startswith("IEEE"), + "test requires IEEE 754 doubles") + # 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 @@ -212,33 +217,33 @@ class MathTests(unittest.TestCase): self.assertRaises(TypeError, math.ceil, t) self.assertRaises(TypeError, math.ceil, t, 0) - if float.__getformat__("double").startswith("IEEE"): - def testCopysign(self): - self.assertRaises(TypeError, math.copysign) - # copysign should let us distinguish signs of zeros - self.assertEquals(copysign(1., 0.), 1.) - self.assertEquals(copysign(1., -0.), -1.) - self.assertEquals(copysign(INF, 0.), INF) - self.assertEquals(copysign(INF, -0.), NINF) - self.assertEquals(copysign(NINF, 0.), INF) - self.assertEquals(copysign(NINF, -0.), NINF) - # and of infinities - self.assertEquals(copysign(1., INF), 1.) - self.assertEquals(copysign(1., NINF), -1.) - self.assertEquals(copysign(INF, INF), INF) - self.assertEquals(copysign(INF, NINF), NINF) - self.assertEquals(copysign(NINF, INF), INF) - self.assertEquals(copysign(NINF, NINF), NINF) - self.assertTrue(math.isnan(copysign(NAN, 1.))) - self.assertTrue(math.isnan(copysign(NAN, INF))) - self.assertTrue(math.isnan(copysign(NAN, NINF))) - self.assertTrue(math.isnan(copysign(NAN, NAN))) - # copysign(INF, NAN) may be INF or it may be NINF, since - # we don't know whether the sign bit of NAN is set on any - # given platform. - self.assertTrue(math.isinf(copysign(INF, NAN))) - # similarly, copysign(2., NAN) could be 2. or -2. - self.assertEquals(abs(copysign(2., NAN)), 2.) + @requires_IEEE_754 + def testCopysign(self): + self.assertRaises(TypeError, math.copysign) + # copysign should let us distinguish signs of zeros + self.assertEquals(copysign(1., 0.), 1.) + self.assertEquals(copysign(1., -0.), -1.) + self.assertEquals(copysign(INF, 0.), INF) + self.assertEquals(copysign(INF, -0.), NINF) + self.assertEquals(copysign(NINF, 0.), INF) + self.assertEquals(copysign(NINF, -0.), NINF) + # and of infinities + self.assertEquals(copysign(1., INF), 1.) + self.assertEquals(copysign(1., NINF), -1.) + self.assertEquals(copysign(INF, INF), INF) + self.assertEquals(copysign(INF, NINF), NINF) + self.assertEquals(copysign(NINF, INF), INF) + self.assertEquals(copysign(NINF, NINF), NINF) + self.assertTrue(math.isnan(copysign(NAN, 1.))) + self.assertTrue(math.isnan(copysign(NAN, INF))) + self.assertTrue(math.isnan(copysign(NAN, NINF))) + self.assertTrue(math.isnan(copysign(NAN, NAN))) + # copysign(INF, NAN) may be INF or it may be NINF, since + # we don't know whether the sign bit of NAN is set on any + # given platform. + self.assertTrue(math.isinf(copysign(INF, NAN))) + # similarly, copysign(2., NAN) could be 2. or -2. + self.assertEquals(abs(copysign(2., NAN)), 2.) def testCos(self): self.assertRaises(TypeError, math.cos) @@ -369,8 +374,7 @@ class MathTests(unittest.TestCase): self.assertEquals(math.frexp(NINF)[0], NINF) self.assertTrue(math.isnan(math.frexp(NAN)[0])) - @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), - "test requires IEEE 754 doubles") + @requires_IEEE_754 @unittest.skipIf(HAVE_DOUBLE_ROUNDING, "fsum is not exact on machines with double rounding") def testFsum(self): @@ -860,9 +864,8 @@ class MathTests(unittest.TestCase): else: self.fail("sqrt(-1) didn't raise ValueError") + @requires_IEEE_754 def test_testfile(self): - if not float.__getformat__("double").startswith("IEEE"): - return for id, fn, ar, ai, er, ei, flags in parse_testfile(test_file): # Skip if either the input or result is complex, or if # flags is nonempty