[Python-checkins] r64729 - in python/trunk: Lib/test/test_float.py Objects/floatobject.c

mark.dickinson python-checkins at python.org
Sat Jul 5 13:33:52 CEST 2008


Author: mark.dickinson
Date: Sat Jul  5 13:33:52 2008
New Revision: 64729

Log:
Issue 3188: accept float('infinity') as well as float('inf').  This
makes the float constructor behave in the same way as specified
by various other language standards, including C99, IEEE 754r,
and the IBM Decimal standard.


Modified:
   python/trunk/Lib/test/test_float.py
   python/trunk/Objects/floatobject.c

Modified: python/trunk/Lib/test/test_float.py
==============================================================================
--- python/trunk/Lib/test/test_float.py	(original)
+++ python/trunk/Lib/test/test_float.py	Sat Jul  5 13:33:52 2008
@@ -253,24 +253,36 @@
         floats_file.close()
 
 # Beginning with Python 2.6 float has cross platform compatible
-# ways to create and representate inf and nan
+# ways to create and represent 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.assert_(isinf(float("infinity")))
+        self.assert_(isinf(float("+infinity")))
+        self.assert_(isinf(float("-infinity")))
 
         self.assertEqual(repr(float("inf")), "inf")
         self.assertEqual(repr(float("+inf")), "inf")
         self.assertEqual(repr(float("-inf")), "-inf")
+        self.assertEqual(repr(float("infinity")), "inf")
+        self.assertEqual(repr(float("+infinity")), "inf")
+        self.assertEqual(repr(float("-infinity")), "-inf")
 
         self.assertEqual(repr(float("INF")), "inf")
         self.assertEqual(repr(float("+Inf")), "inf")
         self.assertEqual(repr(float("-iNF")), "-inf")
+        self.assertEqual(repr(float("Infinity")), "inf")
+        self.assertEqual(repr(float("+iNfInItY")), "inf")
+        self.assertEqual(repr(float("-INFINITY")), "-inf")
 
         self.assertEqual(str(float("inf")), "inf")
         self.assertEqual(str(float("+inf")), "inf")
         self.assertEqual(str(float("-inf")), "-inf")
+        self.assertEqual(str(float("infinity")), "inf")
+        self.assertEqual(str(float("+infinity")), "inf")
+        self.assertEqual(str(float("-infinity")), "-inf")
 
         self.assertRaises(ValueError, float, "info")
         self.assertRaises(ValueError, float, "+info")
@@ -278,6 +290,10 @@
         self.assertRaises(ValueError, float, "in")
         self.assertRaises(ValueError, float, "+in")
         self.assertRaises(ValueError, float, "-in")
+        self.assertRaises(ValueError, float, "infinit")
+        self.assertRaises(ValueError, float, "+Infin")
+        self.assertRaises(ValueError, float, "-INFI")
+        self.assertRaises(ValueError, float, "infinitys")
 
     def test_inf_as_str(self):
         self.assertEqual(repr(1e300 * 1e300), "inf")

Modified: python/trunk/Objects/floatobject.c
==============================================================================
--- python/trunk/Objects/floatobject.c	(original)
+++ python/trunk/Objects/floatobject.c	Sat Jul  5 13:33:52 2008
@@ -246,6 +246,9 @@
 		if (PyOS_strnicmp(p, "inf", 4) == 0) {
 			Py_RETURN_INF(sign);
 		}
+		if (PyOS_strnicmp(p, "infinity", 9) == 0) {
+			Py_RETURN_INF(sign);
+		}
 #ifdef Py_NAN
 		if(PyOS_strnicmp(p, "nan", 4) == 0) {
 			Py_RETURN_NAN;


More information about the Python-checkins mailing list