]> granicus.if.org Git - python/commitdiff
Fixed complex.__getnewargs__() to not emit another complex object.
authorAlexandre Vassalotti <alexandre@peadrop.com>
Wed, 4 Jun 2008 20:41:44 +0000 (20:41 +0000)
committerAlexandre Vassalotti <alexandre@peadrop.com>
Wed, 4 Jun 2008 20:41:44 +0000 (20:41 +0000)
Lib/test/test_complex.py
Objects/complexobject.c

index 5f623a10fb3c63bc58435bddee500e2e9cd917c7..9a3310198cba04ab46233c017e3aca94ddaf5b4d 100644 (file)
@@ -373,6 +373,14 @@ class ComplexTest(unittest.TestCase):
             except (OSError, IOError):
                 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"):
         def test_plus_minus_0j(self):
             # test that -0j and 0j literals are not identified
index e22c200fe779edf51df84863ae906c9c4c93f9cf..6110b997f16ceeb873eaa7907270f85056eddbe8 100644 (file)
@@ -822,7 +822,8 @@ PyDoc_STRVAR(complex_conjugate_doc,
 static PyObject *
 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