[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