Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0df5a85

Browse files
committed
don't require the presence of __getformat__ or __setformat__; use requires_IEEE_754 globally
1 parentf5e81d6 commit0df5a85

File tree

1 file changed

+49
-42
lines changed

1 file changed

+49
-42
lines changed

‎Lib/test/test_float.py‎

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,13 @@
1212
INF=float("inf")
1313
NAN=float("nan")
1414

15+
have_getformat=hasattr(float,"__getformat__")
16+
requires_getformat=unittest.skipUnless(have_getformat,
17+
"requires __getformat__")
18+
requires_setformat=unittest.skipUnless(hasattr(float,"__setformat__"),
19+
"requires __setformat__")
1520
# decorator for skipping tests on non-IEEE 754 platforms
16-
requires_IEEE_754=unittest.skipUnless(
21+
requires_IEEE_754=unittest.skipUnless(have_getformatand
1722
float.__getformat__("double").startswith("IEEE"),
1823
"test requires IEEE 754 doubles")
1924

@@ -357,6 +362,7 @@ def test_float_pow(self):
357362
#self.assertTrue(0.0 > pow_op(-2.0, -1047) > -1e-315)
358363

359364

365+
@requires_setformat
360366
classFormatFunctionsTestCase(unittest.TestCase):
361367

362368
defsetUp(self):
@@ -407,6 +413,7 @@ def test_setformat(self):
407413
# on non-IEEE platforms, attempting to unpack a bit pattern
408414
# representing an infinity or a NaN should raise an exception.
409415

416+
@requires_setformat
410417
classUnknownFormatTestCase(unittest.TestCase):
411418
defsetUp(self):
412419
self.save_formats= {'double':float.__getformat__('double'),
@@ -439,41 +446,42 @@ def test_float_specials_dont_unpack(self):
439446
# let's also try to guarantee that -0.0 and 0.0 don't get confused.
440447

441448
classIEEEFormatTestCase(unittest.TestCase):
442-
iffloat.__getformat__("double").startswith("IEEE"):
443-
deftest_double_specials_do_unpack(self):
444-
forfmt,datain [('>d',BE_DOUBLE_INF),
445-
('>d',BE_DOUBLE_NAN),
446-
('<d',LE_DOUBLE_INF),
447-
('<d',LE_DOUBLE_NAN)]:
448-
struct.unpack(fmt,data)
449-
450-
iffloat.__getformat__("float").startswith("IEEE"):
451-
deftest_float_specials_do_unpack(self):
452-
forfmt,datain [('>f',BE_FLOAT_INF),
453-
('>f',BE_FLOAT_NAN),
454-
('<f',LE_FLOAT_INF),
455-
('<f',LE_FLOAT_NAN)]:
456-
struct.unpack(fmt,data)
457-
458-
iffloat.__getformat__("double").startswith("IEEE"):
459-
deftest_negative_zero(self):
460-
defpos_pos():
461-
return0.0,math.atan2(0.0,-1)
462-
defpos_neg():
463-
return0.0,math.atan2(-0.0,-1)
464-
defneg_pos():
465-
return-0.0,math.atan2(0.0,-1)
466-
defneg_neg():
467-
return-0.0,math.atan2(-0.0,-1)
468-
self.assertEquals(pos_pos(),neg_pos())
469-
self.assertEquals(pos_neg(),neg_neg())
470-
471-
iffloat.__getformat__("double").startswith("IEEE"):
472-
deftest_underflow_sign(self):
473-
# check that -1e-1000 gives -0.0, not 0.0
474-
self.assertEquals(math.atan2(-1e-1000,-1),math.atan2(-0.0,-1))
475-
self.assertEquals(math.atan2(float('-1e-1000'),-1),
476-
math.atan2(-0.0,-1))
449+
450+
@requires_IEEE_754
451+
deftest_double_specials_do_unpack(self):
452+
forfmt,datain [('>d',BE_DOUBLE_INF),
453+
('>d',BE_DOUBLE_NAN),
454+
('<d',LE_DOUBLE_INF),
455+
('<d',LE_DOUBLE_NAN)]:
456+
struct.unpack(fmt,data)
457+
458+
@requires_IEEE_754
459+
deftest_float_specials_do_unpack(self):
460+
forfmt,datain [('>f',BE_FLOAT_INF),
461+
('>f',BE_FLOAT_NAN),
462+
('<f',LE_FLOAT_INF),
463+
('<f',LE_FLOAT_NAN)]:
464+
struct.unpack(fmt,data)
465+
466+
@requires_IEEE_754
467+
deftest_negative_zero(self):
468+
defpos_pos():
469+
return0.0,math.atan2(0.0,-1)
470+
defpos_neg():
471+
return0.0,math.atan2(-0.0,-1)
472+
defneg_pos():
473+
return-0.0,math.atan2(0.0,-1)
474+
defneg_neg():
475+
return-0.0,math.atan2(-0.0,-1)
476+
self.assertEquals(pos_pos(),neg_pos())
477+
self.assertEquals(pos_neg(),neg_neg())
478+
479+
@requires_IEEE_754
480+
deftest_underflow_sign(self):
481+
# check that -1e-1000 gives -0.0, not 0.0
482+
self.assertEquals(math.atan2(-1e-1000,-1),math.atan2(-0.0,-1))
483+
self.assertEquals(math.atan2(float('-1e-1000'),-1),
484+
math.atan2(-0.0,-1))
477485

478486
deftest_format(self):
479487
# these should be rewritten to use both format(x, spec) and
@@ -530,8 +538,7 @@ def test_format(self):
530538
self.assertEqual('{0:f}'.format(NAN),'nan')
531539
self.assertEqual('{0:F}'.format(NAN),'NAN')
532540

533-
@unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
534-
"test requires IEEE 754 doubles")
541+
@requires_IEEE_754
535542
deftest_format_testfile(self):
536543
forlineinopen(format_testfile):
537544
ifline.startswith('--'):
@@ -613,8 +620,8 @@ def test_short_repr(self):
613620
self.assertEqual(s,repr(float(s)))
614621
self.assertEqual(negs,repr(float(negs)))
615622

616-
@unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
617-
"test requires IEEE 754 doubles")
623+
624+
@requires_IEEE_754
618625
classRoundTestCase(unittest.TestCase):
619626
deftest_second_argument_type(self):
620627
# any type with an __index__ method should be permitted as
@@ -752,8 +759,8 @@ def test_halfway_cases(self):
752759
self.assertAlmostEqual(round(0.5e22,-22),1e22)
753760
self.assertAlmostEqual(round(1.5e22,-22),2e22)
754761

755-
@unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
756-
"test requires IEEE 754 doubles")
762+
763+
@requires_IEEE_754
757764
deftest_format_specials(self):
758765
# Test formatting of nans and infs.
759766

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp