Fixed complex.__getnewargs__() to not emit another complex object.

This commit is contained in:
Alexandre Vassalotti 2008-06-04 20:41:44 +00:00
parent d5bb9215c9
commit 80af6da748
2 changed files with 10 additions and 1 deletions

View file

@ -373,6 +373,14 @@ class ComplexTest(unittest.TestCase):
except (OSError, IOError): except (OSError, IOError):
pass pass
def test_getnewargs(self):
self.assertEqual((1+2j).__getnewargs__(), (1.0, 2.0))
self.assertEqual((1-2j).__getnewargs__(), (1.0, -2.0))
self.assertEqual((2j).__getnewargs__(), (0.0, 2.0))
self.assertEqual((-0j).__getnewargs__(), (0.0, -0.0))
self.assertEqual(complex(0, INF).__getnewargs__(), (0.0, INF))
self.assertEqual(complex(INF, 0).__getnewargs__(), (INF, 0.0))
if float.__getformat__("double").startswith("IEEE"): if float.__getformat__("double").startswith("IEEE"):
def test_plus_minus_0j(self): def test_plus_minus_0j(self):
# test that -0j and 0j literals are not identified # test that -0j and 0j literals are not identified

View file

@ -822,7 +822,8 @@ PyDoc_STRVAR(complex_conjugate_doc,
static PyObject * static PyObject *
complex_getnewargs(PyComplexObject *v) complex_getnewargs(PyComplexObject *v)
{ {
return Py_BuildValue("(D)", &v->cval); Py_complex c = v->cval;
return Py_BuildValue("(dd)", c.real, c.imag);
} }
#if 0 #if 0