[pypy-commit] pypy missing-tp_new: move tests and add one for tp_hash
mattip
pypy.commits at gmail.com
Sun Dec 4 15:26:00 EST 2016
Author: Matti Picus <matti.picus at gmail.com>
Branch: missing-tp_new
Changeset: r88881:7fe5dcdd537f
Date: 2016-11-26 21:06 +0200
http://bitbucket.org/pypy/pypy/changeset/7fe5dcdd537f/
Log: move tests and add one for tp_hash
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
@@ -452,48 +452,6 @@
ref = make_ref(space, w_obj)
api.Py_DecRef(ref)
- def test_nb_add_from_python(self, space, api):
- w_date = space.appexec([], """():
- class DateType(object):
- def __add__(self, other):
- return 'sum!'
- return DateType()
- """)
- w_datetype = space.type(w_date)
- py_date = make_ref(space, w_date)
- py_datetype = rffi.cast(PyTypeObjectPtr, make_ref(space, w_datetype))
- assert py_datetype.c_tp_as_number
- assert py_datetype.c_tp_as_number.c_nb_add
- w_obj = generic_cpy_call(space, py_datetype.c_tp_as_number.c_nb_add,
- py_date, py_date)
- assert space.str_w(w_obj) == 'sum!'
-
- def test_tp_new_from_python(self, space, api):
- w_date = space.appexec([], """():
- class Date(object):
- def __new__(cls, year, month, day):
- self = object.__new__(cls)
- self.year = year
- self.month = month
- self.day = day
- return self
- return Date
- """)
- py_datetype = rffi.cast(PyTypeObjectPtr, make_ref(space, w_date))
- one = space.newint(1)
- arg = space.newtuple([one, one, one])
- # call w_date.__new__
- w_obj = space.call_function(w_date, one, one, one)
- w_year = space.getattr(w_obj, space.newbytes('year'))
- assert space.int_w(w_year) == 1
-
- # currently fails with "object() takse no parameters,
- # from the tp_new of space.w_object
- w_obj = generic_cpy_call(space, py_datetype.c_tp_new, py_datetype,
- arg, space.newdict({}))
- w_year = space.getattr(w_obj, space.newbytes('year'))
- assert space.int_w(w_year) == 1
-
class AppTestSlots(AppTestCpythonExtensionBase):
def setup_class(cls):
AppTestCpythonExtensionBase.setup_class.im_func(cls)
diff --git a/pypy/module/cpyext/test/test_userslots.py b/pypy/module/cpyext/test/test_userslots.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/cpyext/test/test_userslots.py
@@ -0,0 +1,63 @@
+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
+
+
+class TestAppLevelObject(BaseApiTest):
+ def test_nb_add_from_python(self, space, api):
+ w_date = space.appexec([], """():
+ class DateType(object):
+ def __add__(self, other):
+ return 'sum!'
+ return DateType()
+ """)
+ w_datetype = space.type(w_date)
+ py_date = make_ref(space, w_date)
+ py_datetype = rffi.cast(PyTypeObjectPtr, make_ref(space, w_datetype))
+ assert py_datetype.c_tp_as_number
+ assert py_datetype.c_tp_as_number.c_nb_add
+ w_obj = generic_cpy_call(space, py_datetype.c_tp_as_number.c_nb_add,
+ 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):
+ def __new__(cls, year, month, day):
+ self = object.__new__(cls)
+ self.year = year
+ self.month = month
+ self.day = day
+ return self
+ return Date
+ """)
+ py_datetype = rffi.cast(PyTypeObjectPtr, make_ref(space, w_date))
+ one = space.newint(1)
+ arg = space.newtuple([one, one, one])
+ # call w_date.__new__
+ w_obj = space.call_function(w_date, one, one, one)
+ w_year = space.getattr(w_obj, space.newbytes('year'))
+ assert space.int_w(w_year) == 1
+
+ w_obj = generic_cpy_call(space, py_datetype.c_tp_new, py_datetype,
+ arg, space.newdict({}))
+ w_year = space.getattr(w_obj, space.newbytes('year'))
+ assert space.int_w(w_year) == 1
+
+
More information about the pypy-commit
mailing list