[pypy-commit] pypy missing-tp_new: move tests around, some now fail
mattip
pypy.commits at gmail.com
Fri Dec 30 04:58:30 EST 2016
Author: Matti Picus <matti.picus at gmail.com>
Branch: missing-tp_new
Changeset: r89271:c0e51122aaf3
Date: 2016-12-28 20:53 +0200
http://bitbucket.org/pypy/pypy/changeset/c0e51122aaf3/
Log: move tests around, some now fail
diff --git a/pypy/module/cpyext/test/test_typeobject.py b/pypy/module/cpyext/test/test_typeobject.py
--- a/pypy/module/cpyext/test/test_typeobject.py
+++ b/pypy/module/cpyext/test/test_typeobject.py
@@ -664,30 +664,6 @@
assert module.tp_init(list, x, ("hi",)) is None
assert x == ["h", "i"]
- def test_tp_str(self):
- module = self.import_extension('foo', [
- ("tp_str", "METH_VARARGS",
- '''
- PyTypeObject *type = (PyTypeObject *)PyTuple_GET_ITEM(args, 0);
- PyObject *obj = PyTuple_GET_ITEM(args, 1);
- if (!type->tp_str)
- {
- PyErr_SetNone(PyExc_ValueError);
- return NULL;
- }
- return type->tp_str(obj);
- '''
- )
- ])
- class C:
- def __str__(self):
- return "text"
- assert module.tp_str(type(C()), C()) == "text"
- class D(int):
- def __str__(self):
- return "more text"
- assert module.tp_str(int, D(42)) == "42"
-
def test_mp_ass_subscript(self):
module = self.import_extension('foo', [
("new_obj", "METH_NOARGS",
diff --git a/pypy/module/cpyext/test/test_userslots.py b/pypy/module/cpyext/test/test_userslots.py
--- a/pypy/module/cpyext/test/test_userslots.py
+++ b/pypy/module/cpyext/test/test_userslots.py
@@ -1,8 +1,9 @@
-from pypy.module.cpyext.test.test_api import BaseApiTest
from rpython.rtyper.lltypesystem import rffi
from pypy.module.cpyext.pyobject import make_ref, from_ref
from pypy.module.cpyext.api import generic_cpy_call
from pypy.module.cpyext.typeobject import PyTypeObjectPtr
+from pypy.module.cpyext.test.test_api import BaseApiTest
+from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
class TestAppLevelObject(BaseApiTest):
@@ -22,20 +23,6 @@
py_date, py_date)
assert space.str_w(w_obj) == 'sum!'
- def test_tp_hash_from_python(self, space, api):
- w_c = space.appexec([], """():
- class C:
- def __hash__(self):
- return -23
- return C()
- """)
- w_ctype = space.type(w_c)
- py_c = make_ref(space, w_c)
- py_ctype = rffi.cast(PyTypeObjectPtr, make_ref(space, w_ctype))
- assert py_ctype.c_tp_hash
- val = generic_cpy_call(space, py_ctype.c_tp_hash, py_c)
- assert val == -23
-
def test_tp_new_from_python(self, space, api):
w_date = space.appexec([], """():
class Date(object):
@@ -60,4 +47,49 @@
w_year = space.getattr(w_obj, space.newbytes('year'))
assert space.int_w(w_year) == 1
+class AppTestUserSlots(AppTestCpythonExtensionBase):
+ def test_tp_hash_from_python(self):
+ # to see that the functions are being used,
+ # run pytest with -s
+ module = self.import_extension('foo', [
+ ("use_hash", "METH_O",
+ '''
+ long hash = args->ob_type->tp_hash(args);
+ return PyLong_FromLong(hash);
+ ''')])
+ class C(object):
+ def __hash__(self):
+ return -23
+ c = C()
+ # uses the userslot slot_tp_hash
+ ret = module.use_hash(C())
+ assert hash(c) == ret
+ # uses the slotdef renamed cpyext_tp_hash_int
+ ret = module.use_hash(3)
+ assert hash(3) == ret
+ def test_tp_str(self):
+ module = self.import_extension('foo', [
+ ("tp_str", "METH_VARARGS",
+ '''
+ PyTypeObject *type = (PyTypeObject *)PyTuple_GET_ITEM(args, 0);
+ PyObject *obj = PyTuple_GET_ITEM(args, 1);
+ if (!type->tp_str)
+ {
+ PyErr_SetNone(PyExc_ValueError);
+ return NULL;
+ }
+ return type->tp_str(obj);
+ '''
+ )
+ ])
+ class C:
+ def __str__(self):
+ return "text"
+ assert module.tp_str(type(C()), C()) == "text"
+ class D(int):
+ def __str__(self):
+ return "more text"
+ assert module.tp_str(int, D(42)) == "42"
+
+
More information about the pypy-commit
mailing list