[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