]> granicus.if.org Git - python/commitdiff
Issue 3188: accept float('infinity') as well as float('inf'). This
authorMark Dickinson <dickinsm@gmail.com>
Sat, 5 Jul 2008 11:33:52 +0000 (11:33 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Sat, 5 Jul 2008 11:33:52 +0000 (11:33 +0000)
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.

Lib/test/test_float.py
Objects/floatobject.c

index 1a117076daffe9c3a5f763c1dd89cafc0d7ce329..bb48df08324790a8a919f0efc7e0d6d51c011de2 100644 (file)
@@ -253,24 +253,36 @@ class ReprTestCase(unittest.TestCase):
         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 @@ class InfNanTest(unittest.TestCase):
         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")
index 32e7cc8088cec0e9d961c46584719145f68239b8..83401f2938c20ef05b9b606f564e81937c6a1100 100644 (file)
@@ -246,6 +246,9 @@ PyFloat_FromString(PyObject *v, char **pend)
                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;