mirror of
https://github.com/python/cpython.git
synced 2025-09-23 08:53:45 +00:00
don't require the presence of __getformat__ or __setformat__; use requires_IEEE_754 globally
This commit is contained in:
parent
f5e81d62fc
commit
0df5a858e7
1 changed files with 46 additions and 39 deletions
|
@ -12,8 +12,13 @@ import sys
|
||||||
INF = float("inf")
|
INF = float("inf")
|
||||||
NAN = float("nan")
|
NAN = float("nan")
|
||||||
|
|
||||||
|
have_getformat = hasattr(float, "__getformat__")
|
||||||
|
requires_getformat = unittest.skipUnless(have_getformat,
|
||||||
|
"requires __getformat__")
|
||||||
|
requires_setformat = unittest.skipUnless(hasattr(float, "__setformat__"),
|
||||||
|
"requires __setformat__")
|
||||||
# decorator for skipping tests on non-IEEE 754 platforms
|
# decorator for skipping tests on non-IEEE 754 platforms
|
||||||
requires_IEEE_754 = unittest.skipUnless(
|
requires_IEEE_754 = unittest.skipUnless(have_getformat and
|
||||||
float.__getformat__("double").startswith("IEEE"),
|
float.__getformat__("double").startswith("IEEE"),
|
||||||
"test requires IEEE 754 doubles")
|
"test requires IEEE 754 doubles")
|
||||||
|
|
||||||
|
@ -357,6 +362,7 @@ class GeneralFloatCases(unittest.TestCase):
|
||||||
#self.assertTrue(0.0 > pow_op(-2.0, -1047) > -1e-315)
|
#self.assertTrue(0.0 > pow_op(-2.0, -1047) > -1e-315)
|
||||||
|
|
||||||
|
|
||||||
|
@requires_setformat
|
||||||
class FormatFunctionsTestCase(unittest.TestCase):
|
class FormatFunctionsTestCase(unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -407,6 +413,7 @@ LE_FLOAT_NAN = ''.join(reversed(BE_FLOAT_NAN))
|
||||||
# on non-IEEE platforms, attempting to unpack a bit pattern
|
# on non-IEEE platforms, attempting to unpack a bit pattern
|
||||||
# representing an infinity or a NaN should raise an exception.
|
# representing an infinity or a NaN should raise an exception.
|
||||||
|
|
||||||
|
@requires_setformat
|
||||||
class UnknownFormatTestCase(unittest.TestCase):
|
class UnknownFormatTestCase(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.save_formats = {'double':float.__getformat__('double'),
|
self.save_formats = {'double':float.__getformat__('double'),
|
||||||
|
@ -439,7 +446,8 @@ class UnknownFormatTestCase(unittest.TestCase):
|
||||||
# let's also try to guarantee that -0.0 and 0.0 don't get confused.
|
# let's also try to guarantee that -0.0 and 0.0 don't get confused.
|
||||||
|
|
||||||
class IEEEFormatTestCase(unittest.TestCase):
|
class IEEEFormatTestCase(unittest.TestCase):
|
||||||
if float.__getformat__("double").startswith("IEEE"):
|
|
||||||
|
@requires_IEEE_754
|
||||||
def test_double_specials_do_unpack(self):
|
def test_double_specials_do_unpack(self):
|
||||||
for fmt, data in [('>d', BE_DOUBLE_INF),
|
for fmt, data in [('>d', BE_DOUBLE_INF),
|
||||||
('>d', BE_DOUBLE_NAN),
|
('>d', BE_DOUBLE_NAN),
|
||||||
|
@ -447,7 +455,7 @@ class IEEEFormatTestCase(unittest.TestCase):
|
||||||
('<d', LE_DOUBLE_NAN)]:
|
('<d', LE_DOUBLE_NAN)]:
|
||||||
struct.unpack(fmt, data)
|
struct.unpack(fmt, data)
|
||||||
|
|
||||||
if float.__getformat__("float").startswith("IEEE"):
|
@requires_IEEE_754
|
||||||
def test_float_specials_do_unpack(self):
|
def test_float_specials_do_unpack(self):
|
||||||
for fmt, data in [('>f', BE_FLOAT_INF),
|
for fmt, data in [('>f', BE_FLOAT_INF),
|
||||||
('>f', BE_FLOAT_NAN),
|
('>f', BE_FLOAT_NAN),
|
||||||
|
@ -455,7 +463,7 @@ class IEEEFormatTestCase(unittest.TestCase):
|
||||||
('<f', LE_FLOAT_NAN)]:
|
('<f', LE_FLOAT_NAN)]:
|
||||||
struct.unpack(fmt, data)
|
struct.unpack(fmt, data)
|
||||||
|
|
||||||
if float.__getformat__("double").startswith("IEEE"):
|
@requires_IEEE_754
|
||||||
def test_negative_zero(self):
|
def test_negative_zero(self):
|
||||||
def pos_pos():
|
def pos_pos():
|
||||||
return 0.0, math.atan2(0.0, -1)
|
return 0.0, math.atan2(0.0, -1)
|
||||||
|
@ -468,7 +476,7 @@ class IEEEFormatTestCase(unittest.TestCase):
|
||||||
self.assertEquals(pos_pos(), neg_pos())
|
self.assertEquals(pos_pos(), neg_pos())
|
||||||
self.assertEquals(pos_neg(), neg_neg())
|
self.assertEquals(pos_neg(), neg_neg())
|
||||||
|
|
||||||
if float.__getformat__("double").startswith("IEEE"):
|
@requires_IEEE_754
|
||||||
def test_underflow_sign(self):
|
def test_underflow_sign(self):
|
||||||
# check that -1e-1000 gives -0.0, not 0.0
|
# check that -1e-1000 gives -0.0, not 0.0
|
||||||
self.assertEquals(math.atan2(-1e-1000, -1), math.atan2(-0.0, -1))
|
self.assertEquals(math.atan2(-1e-1000, -1), math.atan2(-0.0, -1))
|
||||||
|
@ -530,8 +538,7 @@ class IEEEFormatTestCase(unittest.TestCase):
|
||||||
self.assertEqual('{0:f}'.format(NAN), 'nan')
|
self.assertEqual('{0:f}'.format(NAN), 'nan')
|
||||||
self.assertEqual('{0:F}'.format(NAN), 'NAN')
|
self.assertEqual('{0:F}'.format(NAN), 'NAN')
|
||||||
|
|
||||||
@unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
|
@requires_IEEE_754
|
||||||
"test requires IEEE 754 doubles")
|
|
||||||
def test_format_testfile(self):
|
def test_format_testfile(self):
|
||||||
for line in open(format_testfile):
|
for line in open(format_testfile):
|
||||||
if line.startswith('--'):
|
if line.startswith('--'):
|
||||||
|
@ -613,8 +620,8 @@ class ReprTestCase(unittest.TestCase):
|
||||||
self.assertEqual(s, repr(float(s)))
|
self.assertEqual(s, repr(float(s)))
|
||||||
self.assertEqual(negs, repr(float(negs)))
|
self.assertEqual(negs, repr(float(negs)))
|
||||||
|
|
||||||
@unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
|
|
||||||
"test requires IEEE 754 doubles")
|
@requires_IEEE_754
|
||||||
class RoundTestCase(unittest.TestCase):
|
class RoundTestCase(unittest.TestCase):
|
||||||
def test_second_argument_type(self):
|
def test_second_argument_type(self):
|
||||||
# any type with an __index__ method should be permitted as
|
# any type with an __index__ method should be permitted as
|
||||||
|
@ -752,8 +759,8 @@ class RoundTestCase(unittest.TestCase):
|
||||||
self.assertAlmostEqual(round(0.5e22, -22), 1e22)
|
self.assertAlmostEqual(round(0.5e22, -22), 1e22)
|
||||||
self.assertAlmostEqual(round(1.5e22, -22), 2e22)
|
self.assertAlmostEqual(round(1.5e22, -22), 2e22)
|
||||||
|
|
||||||
@unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
|
|
||||||
"test requires IEEE 754 doubles")
|
@requires_IEEE_754
|
||||||
def test_format_specials(self):
|
def test_format_specials(self):
|
||||||
# Test formatting of nans and infs.
|
# Test formatting of nans and infs.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue