[pypy-svn] r73915 - in pypy/branch/cpython-extension/pypy/module/cpyext: . test
afa at codespeak.net
afa at codespeak.net
Tue Apr 20 17:53:40 CEST 2010
Author: afa
Date: Tue Apr 20 17:53:38 2010
New Revision: 73915
Added:
pypy/branch/cpython-extension/pypy/module/cpyext/complexobject.py (contents, props changed)
pypy/branch/cpython-extension/pypy/module/cpyext/test/test_complexobject.py (contents, props changed)
Modified:
pypy/branch/cpython-extension/pypy/module/cpyext/__init__.py
pypy/branch/cpython-extension/pypy/module/cpyext/api.py
Log:
Some part of PyComplex object.
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/__init__.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/__init__.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/__init__.py Tue Apr 20 17:53:38 2010
@@ -65,6 +65,7 @@
import pypy.module.cpyext.stubsactive
import pypy.module.cpyext.pystate
import pypy.module.cpyext.datetime
+import pypy.module.cpyext.complexobject
# now that all rffi_platform.Struct types are registered, configure them
api.configure_types()
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/api.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/api.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/api.py Tue Apr 20 17:53:38 2010
@@ -278,6 +278,7 @@
"Bool": "space.w_bool",
"Float": "space.w_float",
"Long": "space.w_long",
+ "Complex": "space.w_complex",
"BaseObject": "space.w_object",
'None': 'space.type(space.w_None)',
'NotImplemented': 'space.type(space.w_NotImplemented)',
Added: pypy/branch/cpython-extension/pypy/module/cpyext/complexobject.py
==============================================================================
--- (empty file)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/complexobject.py Tue Apr 20 17:53:38 2010
@@ -0,0 +1,27 @@
+from pypy.rpython.lltypesystem import lltype
+from pypy.module.cpyext.api import cpython_api, PyObject, build_type_checkers
+from pypy.objspace.std.complexobject import W_ComplexObject
+
+PyComplex_Check, PyComplex_CheckExact = build_type_checkers("Complex")
+
+ at cpython_api([lltype.Float, lltype.Float], PyObject)
+def PyComplex_FromDoubles(space, real, imag):
+ return space.newcomplex(real, imag)
+
+ at cpython_api([PyObject], lltype.Float, error=-1)
+def PyComplex_RealAsDouble(space, w_obj):
+ if space.is_true(space.isinstance(w_obj, space.w_complex)):
+ assert isinstance(w_obj, W_ComplexObject)
+ return w_obj.realval
+ else:
+ return space.float_w(w_obj)
+
+ at cpython_api([PyObject], lltype.Float, error=-1)
+def PyComplex_ImagAsDouble(space, w_obj):
+ if space.is_true(space.isinstance(w_obj, space.w_complex)):
+ assert isinstance(w_obj, W_ComplexObject)
+ return w_obj.imagval
+ else:
+ # CPython also accepts anything
+ return 0.0
+
Added: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_complexobject.py
==============================================================================
--- (empty file)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_complexobject.py Tue Apr 20 17:53:38 2010
@@ -0,0 +1,19 @@
+from pypy.module.cpyext.test.test_api import BaseApiTest
+
+class TestComplexObject(BaseApiTest):
+ def test_complexobject(self, space, api):
+ w_value = api.PyComplex_FromDoubles(1.2, 3.4)
+ assert space.unwrap(w_value) == 1.2+3.4j
+ assert api.PyComplex_RealAsDouble(w_value) == 1.2
+ assert api.PyComplex_ImagAsDouble(w_value) == 3.4
+
+ assert api.PyComplex_RealAsDouble(space.wrap(42)) == 42
+ assert api.PyComplex_RealAsDouble(space.wrap(1.5)) == 1.5
+ assert api.PyComplex_ImagAsDouble(space.wrap(1.5)) == 0.0
+
+ # cpython accepts anything for PyComplex_ImagAsDouble
+ assert api.PyComplex_ImagAsDouble(space.w_None) == 0.0
+ assert not api.PyErr_Occurred()
+ assert api.PyComplex_RealAsDouble(space.w_None) == -1.0
+ assert api.PyErr_Occurred()
+ api.PyErr_Clear()
More information about the Pypy-commit
mailing list