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. ........
This commit is contained in:
parent
193152c174
commit
de8a710849
|
@ -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)
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue