[pypy-svn] r72709 - in pypy/branch/cpython-extension/pypy/module/cpyext: . include test
jandem at codespeak.net
jandem at codespeak.net
Wed Mar 24 15:18:29 CET 2010
Author: jandem
Date: Wed Mar 24 15:18:27 2010
New Revision: 72709
Added:
pypy/branch/cpython-extension/pypy/module/cpyext/test/test_object.py
Modified:
pypy/branch/cpython-extension/pypy/module/cpyext/include/object.h
pypy/branch/cpython-extension/pypy/module/cpyext/object.py
Log:
Add PyObject_{IsTrue, Not}, with tests
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/include/object.h
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/include/object.h (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/include/object.h Wed Mar 24 15:18:27 2010
@@ -394,4 +394,7 @@
/* PyPy internal ----------------------------------- */
int PyPyType_Register(PyTypeObject *);
+int PyObject_IsTrue(PyObject *);
+int PyObject_Not(PyObject *);
+
#endif
Modified: pypy/branch/cpython-extension/pypy/module/cpyext/object.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/object.py (original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/object.py Wed Mar 24 15:18:27 2010
@@ -26,3 +26,10 @@
obj_voidp = rffi.cast(rffi.VOIDP_real, obj)
generic_cpy_call(space, pto.c_tp_free, obj_voidp)
+ at cpython_api([PyObject], rffi.INT_real)
+def PyObject_IsTrue(space, w_obj):
+ return space.is_true(w_obj)
+
+ at cpython_api([PyObject], rffi.INT_real)
+def PyObject_Not(space, w_obj):
+ return space.is_true(space.not_(w_obj))
Added: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_object.py
==============================================================================
--- (empty file)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_object.py Wed Mar 24 15:18:27 2010
@@ -0,0 +1,31 @@
+from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
+
+import py
+import sys
+
+class AppTestObject(AppTestCpythonExtensionBase):
+ def test_IsTrue(self):
+ module = self.import_extension('foo', [
+ ("test_IsTrue", "METH_VARARGS",
+ """
+ PyObject* arg = PyTuple_GetItem(args, 0);
+ return PyBool_FromLong(PyObject_IsTrue(arg));
+ """),
+ ])
+ assert module.test_IsTrue(True)
+ assert module.test_IsTrue(1.0)
+ assert not module.test_IsTrue(False)
+ assert not module.test_IsTrue(0)
+
+ def test_Not(self):
+ module = self.import_extension('foo', [
+ ("test_Not", "METH_VARARGS",
+ """
+ PyObject* arg = PyTuple_GetItem(args, 0);
+ return PyBool_FromLong(PyObject_Not(arg));
+ """),
+ ])
+ assert module.test_Not(False)
+ assert module.test_Not(0)
+ assert not module.test_Not(True)
+ assert not module.test_Not(3.14)
More information about the Pypy-commit
mailing list