mirror of
https://github.com/python/cpython.git
synced 2025-07-30 06:34:15 +00:00
Applied patch #1635: Float patch for inf and nan on Windows (and other platforms).
The patch unifies float("inf") and repr(float("inf")) on all platforms.
This commit is contained in:
parent
8777bcae27
commit
0a8143f646
18 changed files with 394 additions and 9 deletions
|
@ -3,6 +3,12 @@ import unittest, struct
|
|||
import os
|
||||
from test import test_support
|
||||
|
||||
def isinf(x):
|
||||
return x * 0.5 == x
|
||||
|
||||
def isnan(x):
|
||||
return x != x
|
||||
|
||||
class FormatFunctionsTestCase(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
@ -128,13 +134,78 @@ class ReprTestCase(unittest.TestCase):
|
|||
self.assertEqual(v, eval(repr(v)))
|
||||
floats_file.close()
|
||||
|
||||
# Beginning with Python 2.6 float has cross platform compatible
|
||||
# ways to create and representate inf and nan
|
||||
class InfNanTest(unittest.TestCase):
|
||||
def test_inf_from_str(self):
|
||||
self.assert_(isinf(float("inf")))
|
||||
self.assert_(isinf(float("+inf")))
|
||||
self.assert_(isinf(float("-inf")))
|
||||
|
||||
self.assertEqual(repr(float("inf")), "inf")
|
||||
self.assertEqual(repr(float("+inf")), "inf")
|
||||
self.assertEqual(repr(float("-inf")), "-inf")
|
||||
|
||||
self.assertEqual(repr(float("INF")), "inf")
|
||||
self.assertEqual(repr(float("+Inf")), "inf")
|
||||
self.assertEqual(repr(float("-iNF")), "-inf")
|
||||
|
||||
self.assertEqual(str(float("inf")), "inf")
|
||||
self.assertEqual(str(float("+inf")), "inf")
|
||||
self.assertEqual(str(float("-inf")), "-inf")
|
||||
|
||||
self.assertRaises(ValueError, float, "info")
|
||||
self.assertRaises(ValueError, float, "+info")
|
||||
self.assertRaises(ValueError, float, "-info")
|
||||
self.assertRaises(ValueError, float, "in")
|
||||
self.assertRaises(ValueError, float, "+in")
|
||||
self.assertRaises(ValueError, float, "-in")
|
||||
|
||||
def test_inf_as_str(self):
|
||||
self.assertEqual(repr(1e300 * 1e300), "inf")
|
||||
self.assertEqual(repr(-1e300 * 1e300), "-inf")
|
||||
|
||||
self.assertEqual(str(1e300 * 1e300), "inf")
|
||||
self.assertEqual(str(-1e300 * 1e300), "-inf")
|
||||
|
||||
def test_nan_from_str(self):
|
||||
self.assert_(isnan(float("nan")))
|
||||
self.assert_(isnan(float("+nan")))
|
||||
self.assert_(isnan(float("-nan")))
|
||||
|
||||
self.assertEqual(repr(float("nan")), "nan")
|
||||
self.assertEqual(repr(float("+nan")), "nan")
|
||||
self.assertEqual(repr(float("-nan")), "nan")
|
||||
|
||||
self.assertEqual(repr(float("NAN")), "nan")
|
||||
self.assertEqual(repr(float("+NAn")), "nan")
|
||||
self.assertEqual(repr(float("-NaN")), "nan")
|
||||
|
||||
self.assertEqual(str(float("nan")), "nan")
|
||||
self.assertEqual(str(float("+nan")), "nan")
|
||||
self.assertEqual(str(float("-nan")), "nan")
|
||||
|
||||
self.assertRaises(ValueError, float, "nana")
|
||||
self.assertRaises(ValueError, float, "+nana")
|
||||
self.assertRaises(ValueError, float, "-nana")
|
||||
self.assertRaises(ValueError, float, "na")
|
||||
self.assertRaises(ValueError, float, "+na")
|
||||
self.assertRaises(ValueError, float, "-na")
|
||||
|
||||
def test_nan_as_str(self):
|
||||
self.assertEqual(repr(1e300 * 1e300 * 0), "nan")
|
||||
self.assertEqual(repr(-1e300 * 1e300 * 0), "nan")
|
||||
|
||||
self.assertEqual(str(1e300 * 1e300 * 0), "nan")
|
||||
self.assertEqual(str(-1e300 * 1e300 * 0), "nan")
|
||||
|
||||
def test_main():
|
||||
test_support.run_unittest(
|
||||
FormatFunctionsTestCase,
|
||||
UnknownFormatTestCase,
|
||||
IEEEFormatTestCase,
|
||||
#ReprTestCase
|
||||
ReprTestCase,
|
||||
InfNanTest,
|
||||
)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue