[pypy-svn] r73180 - pypy/branch/cpython-extension/pypy/module/cpyext/test

afa at codespeak.net afa at codespeak.net
Tue Mar 30 17:48:51 CEST 2010


Author: afa
Date: Tue Mar 30 17:48:49 2010
New Revision: 73180

Modified:
   pypy/branch/cpython-extension/pypy/module/cpyext/test/test_boolobject.py
   pypy/branch/cpython-extension/pypy/module/cpyext/test/test_dictobject.py
   pypy/branch/cpython-extension/pypy/module/cpyext/test/test_floatobject.py
   pypy/branch/cpython-extension/pypy/module/cpyext/test/test_intobject.py
   pypy/branch/cpython-extension/pypy/module/cpyext/test/test_sequence.py
Log:
Smaller and faster tests, written at interp_level


Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_boolobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_boolobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_boolobject.py	Tue Mar 30 17:48:49 2010
@@ -1,46 +1,26 @@
 from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
+from pypy.module.cpyext.test.test_api import BaseApiTest
 
-import py
-import sys
+class TestBoolObject(BaseApiTest):
+    def test_fromlong(self, space, api):
+        for i in range(-3, 3):
+            obj = api.PyBool_FromLong(i)
+            if i:
+                assert obj is space.w_True
+            else:
+                assert obj is space.w_False
 
-class AppTestBoolObject(AppTestCpythonExtensionBase):
-    def test_boolobject(self):
+    def test_check(self, space, api):
+        assert api.PyBool_Check(space.w_True)
+        assert api.PyBool_Check(space.w_False)
+        assert not api.PyBool_Check(space.w_None)
+        assert not api.PyBool_Check(api.PyFloat_FromDouble(1.0))
+
+class AppTestBoolMacros(AppTestCpythonExtensionBase):
+    def test_macros(self):
         module = self.import_extension('foo', [
             ("get_true", "METH_NOARGS",  "Py_RETURN_TRUE;"),
             ("get_false", "METH_NOARGS", "Py_RETURN_FALSE;"),
-            ("test_FromLong", "METH_NOARGS",
-             """
-                 int i;
-                 for(i=-3; i<3; i++)
-                 {
-                     PyObject* obj = PyBool_FromLong(i);
-                     PyObject* expected = (i ? Py_True : Py_False);
-
-                     if(obj != expected)
-                     {
-                         Py_DECREF(obj);
-                         Py_RETURN_FALSE;
-                     }
-                     Py_DECREF(obj);
-                 }
-                 Py_RETURN_TRUE;
-             """),
-            ("test_Check", "METH_NOARGS",
-             """
-                 int result = 0;
-                 PyObject* f = PyFloat_FromDouble(1.0);
-
-                 if(PyBool_Check(Py_True) &&
-                    PyBool_Check(Py_False) &&
-                    !PyBool_Check(f))
-                 {
-                     result = 1;
-                 }
-                 Py_DECREF(f);
-                 return PyBool_FromLong(result);
-             """),
             ])
         assert module.get_true() == True
         assert module.get_false() == False
-        assert module.test_FromLong() == True
-        assert module.test_Check() == True

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_dictobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_dictobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_dictobject.py	Tue Mar 30 17:48:49 2010
@@ -1,40 +1,23 @@
-from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
+from pypy.module.cpyext.test.test_api import BaseApiTest
 
+class TestDictObject(BaseApiTest):
+    def test_dict(self, space, api):
+        d = api.PyDict_New()
+        assert space.eq_w(d, space.newdict())
 
-class AppTestDictObject(AppTestCpythonExtensionBase):
-    def test_dict(self):
-        module = self.import_extension("foo", [
-        ("test_dict_create", "METH_NOARGS",
-        """
-            PyObject *p = PyDict_New();
-            return p;
-        """),
-        ("test_dict_getitem", "METH_VARARGS",
-        """
-            return PyDict_GetItem(PyTuple_GetItem(args, 0), PyTuple_GetItem(args, 1));
-        """),
-        ("test_dict_setitem", "METH_VARARGS",
-        """
-            PyDict_SetItem(
-                PyTuple_GetItem(args, 0),
-                PyTuple_GetItem(args, 1),
-                PyTuple_GetItem(args, 2)
-            );
-            Py_RETURN_NONE;
-        """),
-        ("dict_getitem_str", "METH_VARARGS",
-         """
-         return PyDict_GetItemString(PyTuple_GetItem(args, 0), "name");
-         """
-         ),
-        ])
-        
-        assert module.test_dict_create() == {}
-        assert module.test_dict_getitem({"a": 72}, "a") == 72
-        d = {}
-        module.test_dict_setitem(d, "c", 72)
-        assert d["c"] == 72
-        d["name"] = 3
-        assert module.dict_getitem_str(d) == 3
-        del d["name"]
-        raises(KeyError, module.dict_getitem_str, d)
+        assert space.eq_w(api.PyDict_GetItem(space.wrap({"a": 72}),
+                                             space.wrap("a")),
+                          space.wrap(72))
+
+        assert api.PyDict_SetItem(d, space.wrap("c"), space.wrap(42)) >= 0
+        assert space.eq_w(space.getitem(d, space.wrap("c")),
+                          space.wrap(42))
+
+        space.setitem(d, space.wrap("name"), space.wrap(3))
+        assert space.eq_w(api.PyDict_GetItem(d, space.wrap("name")),
+                          space.wrap(3))
+
+        space.delitem(d, space.wrap("name"))
+        assert not api.PyDict_GetItem(d, space.wrap("name"))
+        assert api.PyErr_Occurred() is space.w_KeyError
+        api.PyErr_Clear()

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_floatobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_floatobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_floatobject.py	Tue Mar 30 17:48:49 2010
@@ -1,5 +1,4 @@
 from pypy.module.cpyext.test.test_api import BaseApiTest
-from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
 
 class TestFloatObject(BaseApiTest):
     def test_floatobject(self, space, api):
@@ -9,20 +8,11 @@
         assert api.PyFloat_AsDouble(space.w_None) == -1
         api.PyErr_Clear()
 
-class AppTestFloatObject(AppTestCpythonExtensionBase):
-    def test_float(self):
-        module = self.import_extension("foo", [
-        ("test_float_coerce", "METH_NOARGS",
-        """
-            return PyNumber_Float(PyTuple_GetItem(args, 0));
-        """),
-        ])
-        
-        assert type(module.test_float_coerce(3)) is float
-        raises(TypeError, module.test_float_coerce, None)
-        
+    def test_coerce(self, space, api):
+        assert space.type(api.PyNumber_Float(space.wrap(3))) is space.w_float
+
         class Coerce(object):
             def __float__(self):
                 return 42.5
-        
-        assert module.test_float_coerce(Coerce()) == 42.5
+        assert space.eq_w(api.PyNumber_Float(space.wrap(Coerce())),
+                          space.wrap(42.5))

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_intobject.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_intobject.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_intobject.py	Tue Mar 30 17:48:49 2010
@@ -1,35 +1,18 @@
+from pypy.module.cpyext.test.test_api import BaseApiTest
+import sys
 
-from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
-
-class AppTestIntObject(AppTestCpythonExtensionBase):
-    def test_intobject(self):
-        import sys
-        module = self.import_extension('foo', [
-            ("check_int", "METH_VARARGS",
-             """
-             PyObject* a = PyTuple_GetItem(args, 0);
-             if (PyInt_Check(a)) {
-                 Py_RETURN_TRUE;
-             }
-             Py_RETURN_FALSE;
-             """),
-            ("add_one", "METH_VARARGS",
-             """
-             PyObject *a = PyTuple_GetItem(args, 0);
-             long x = PyInt_AsLong(a);
-             if (x == -1) {
-                if (PyErr_Occurred()) {
-                   return NULL;
-                }
-             }
-             return PyInt_FromLong(x + 1);
-             """
-             )
-            ])
-        assert module.check_int(3)
-        assert module.check_int(True)
-        assert not module.check_int((1, 2, 3))
+class TestIntObject(BaseApiTest):
+    def test_intobject(self, space, api):
+        assert api.PyInt_Check(space.wrap(3))
+        assert api.PyInt_Check(space.w_True)
+        assert not api.PyInt_Check(space.wrap((1, 2, 3)))
         for i in [3, -5, -1, -sys.maxint, sys.maxint - 1]:
-            assert module.add_one(i) == i + 1
-        assert type(module.add_one(3)) is int
-        raises(TypeError, module.add_one, None)
+            x = api.PyInt_AsLong(space.wrap(i))
+            assert x == i
+            w_x = api.PyInt_FromLong(x + 1)
+            assert space.type(w_x) is space.w_int
+            assert space.eq_w(w_x, space.wrap(i + 1))
+
+        assert api.PyInt_AsLong(space.w_None) == -1
+        assert api.PyErr_Occurred() is space.w_TypeError
+        api.PyErr_Clear()

Modified: pypy/branch/cpython-extension/pypy/module/cpyext/test/test_sequence.py
==============================================================================
--- pypy/branch/cpython-extension/pypy/module/cpyext/test/test_sequence.py	(original)
+++ pypy/branch/cpython-extension/pypy/module/cpyext/test/test_sequence.py	Tue Mar 30 17:48:49 2010
@@ -1,41 +1,31 @@
+from pypy.rpython.lltypesystem import rffi, lltype
+from pypy.interpreter.error import OperationError
+from pypy.module.cpyext.test.test_api import BaseApiTest
+from pypy.module.cpyext import sequence
 
+class TestIterator(BaseApiTest):
+    def test_sequence(self, space, api):
+        w_t = space.wrap((1, 2, 3, 4))
+        assert api.PySequence_Fast(w_t, "message") is w_t
+        w_l = space.wrap((1, 2, 3, 4))
+        assert api.PySequence_Fast(w_l, "message") is w_l
 
-from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
+        assert space.int_w(api.PySequence_Fast_GET_ITEM(w_l, 1)) == 2
+        assert api.PySequence_Fast_GET_SIZE(w_l) == 4
 
-class AppTestIterator(AppTestCpythonExtensionBase):
-    def test_iterator(self):
-        import sys
-        module = self.import_extension('foo', [
-            ("newiter", "METH_VARARGS",
-             '''
-             return PySequence_Fast(PyTuple_GetItem(args, 0), "message");
-             '''
-             ),
-            ("fast_getitem", "METH_VARARGS",
-             '''
-             PyObject *lst = PyTuple_GetItem(args, 0);
-             long index = PyInt_AsLong(PyTuple_GetItem(args, 1));
-             return PySequence_Fast_GET_ITEM(lst, index);
-             '''
-             ),
-            ("fast_getsize", "METH_VARARGS",
-             '''
-             PyObject *lst = PyTuple_GetItem(args, 0);
-             return PyInt_FromLong(PySequence_Fast_GET_SIZE(lst));
-             '''
-             ),
-            ])
-        t = (1, 2, 3, 4)
-        assert module.newiter(t) is t
-        l = [1, 2, 3, 4]
-        assert module.newiter(l) is l
-        assert isinstance(module.newiter(set([1, 2, 3])), tuple)
-        assert sorted(module.newiter(set([1, 2, 3]))) == [1, 2, 3]
-        try:
-            module.newiter(3)
-        except TypeError, te:
-            assert te.args == ("message",)
-        else:
-            raise Exception("DID NOT RAISE")
-        assert module.fast_getitem((1, 2, 3), 1) == 2
-        assert module.fast_getsize([1, 2, 3]) == 3
+        w_set = space.wrap(set((1, 2, 3, 4)))
+        w_seq = api.PySequence_Fast(w_set, "message")
+        assert space.type(w_seq) is space.w_tuple
+        assert space.int_w(space.len(w_seq)) == 4
+
+    def test_exception(self, space, api):
+        message = rffi.str2charp("message")
+        assert not api.PySequence_Fast(space.wrap(3), message)
+        assert api.PyErr_Occurred() is space.w_TypeError
+        api.PyErr_Clear()
+
+        exc = raises(OperationError, sequence.PySequence_Fast,
+                     space, space.wrap(3), message)
+        assert exc.value.match(space, space.w_TypeError)
+        assert space.str_w(exc.value.get_w_value(space)) == "message"
+        rffi.free_charp(message)



More information about the Pypy-commit mailing list