diff options
author | Mark Dickinson <dickinsm@gmail.com> | 2009-04-25 10:11:40 (GMT) |
---|---|---|
committer | Mark Dickinson <dickinsm@gmail.com> | 2009-04-25 10:11:40 (GMT) |
commit | de8a710849827f8e55e73d59bca41d2594a9db99 (patch) | |
tree | 9bb8a084734eb0be3b73e858522501477101b69f | |
parent | 193152c17479732f2fd9bd5d14ae4db119727bec (diff) | |
download | cpython-de8a710849827f8e55e73d59bca41d2594a9db99.zip cpython-de8a710849827f8e55e73d59bca41d2594a9db99.tar.gz cpython-de8a710849827f8e55e73d59bca41d2594a9db99.tar.bz2 |
Merged revisions 71869 via svnmerge from
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.
........
-rw-r--r-- | Lib/test/test_complex.py | 22 | ||||
-rw-r--r-- | Objects/complexobject.c | 2 |
2 files changed, 20 insertions, 4 deletions
diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py index d029d86..87e2584 100644 --- a/Lib/test/test_complex.py +++ b/Lib/test/test_complex.py @@ -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) diff --git a/Objects/complexobject.c b/Objects/complexobject.c index fa5ea61..37d9888 100644 --- a/Objects/complexobject.c +++ b/Objects/complexobject.c @@ -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 */ |