]> granicus.if.org Git - python/commitdiff
Merged revisions 71869 via svnmerge from
authorMark Dickinson <dickinsm@gmail.com>
Sat, 25 Apr 2009 10:11:40 +0000 (10:11 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Sat, 25 Apr 2009 10:11:40 +0000 (10:11 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r71869 | mark.dickinson | 2009-04-25 10:47:00 +0100 (Sat, 25 Apr 2009) | 2 lines

  Fix typo in complex parsing code;  expand tests.
........

Lib/test/test_complex.py
Objects/complexobject.c

index d029d86ddf59c67e5bec69671d9dddacf81bf854..87e25841fcd27a10d949fb20270cff24d8116d88 100644 (file)
@@ -410,10 +410,11 @@ class ComplexTest(unittest.TestCase):
     @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
                          "test requires IEEE 754 doubles")
     def test_repr_roundtrip(self):
-        # complex(repr(z)) should recover z exactly, even for complex numbers
-        # involving an infinity, nan, or negative zero
-        vals = [0.0, 1e-200, 0.0123, 3.1415, 1e50, INF, NAN]
+        vals = [0.0, 1e-500, 1e-315, 1e-200, 0.0123, 3.1415, 1e50, INF, NAN]
         vals += [-v for v in vals]
+
+        # complex(repr(z)) should recover z exactly, even for complex
+        # numbers involving an infinity, nan, or negative zero
         for x in vals:
             for y in vals:
                 z = complex(x, y)
@@ -421,6 +422,21 @@ class ComplexTest(unittest.TestCase):
                 self.assertFloatsAreIdentical(z.real, roundtrip.real)
                 self.assertFloatsAreIdentical(z.imag, roundtrip.imag)
 
+        # if we predefine some constants, then eval(repr(z)) should
+        # also work, except that it might change the sign of zeros
+        inf, nan = float('inf'), float('nan')
+        infj, nanj = complex(0.0, inf), complex(0.0, nan)
+        for x in vals:
+            for y in vals:
+                z = complex(x, y)
+                roundtrip = eval(repr(z))
+                # adding 0.0 has no effect beside changing -0.0 to 0.0
+                self.assertFloatsAreIdentical(0.0 + z.real,
+                                              0.0 + roundtrip.real)
+                self.assertFloatsAreIdentical(0.0 + z.imag,
+                                              0.0 + roundtrip.imag)
+
+
 
 def test_main():
     support.run_unittest(ComplexTest)
index fa5ea61e02a3a6ba13a156929040a2f107d9148e..37d9888252e511b33a58f1d1b693f39eca5f5634 100644 (file)
@@ -797,7 +797,7 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
                        y = PyOS_ascii_strtod(s, &end);
                        if (end == s && errno == ENOMEM)
                                return PyErr_NoMemory();
-                       if (errno == ERANGE && fabs(z) >= 1.0)
+                       if (errno == ERANGE && fabs(y) >= 1.0)
                                goto overflow;
                        if (end != s)
                                /* <float><signed-float>j */