1
PYTHON setup.py build_ext --inplace
2
PYTHON -c "import runner"
4
######## setup.py ########
6
from Cython.Build.Dependencies import cythonize
7
from distutils.core import setup
9
setup(ext_modules=cythonize("*.pyx"))
11
######## notheaptype.pyx ########
18
cdef class Foo(Base, Obj):
21
######## wrongbase.pyx ########
28
cdef class X(Base, Str):
31
######## badmro.pyx ########
36
cdef class X(object, Py):
39
######## nodict.pyx ########
47
cdef class X(Base, Py):
50
######## oldstyle.pyx ########
51
# cython: language_level=2
59
cdef class Foo(Base, OldStyle):
62
######## runner.py ########
68
assert False, "notheaptype"
69
except TypeError as msg:
70
assert str(msg) == "base class 'object' is not a heap type"
74
assert False, "wrongbase"
75
except TypeError as msg:
76
assert str(msg) == "best base 'str' must be equal to first base 'wrongbase.Base'"
80
assert False, "badmro"
81
except TypeError as msg:
82
assert str(msg).startswith("Cannot create a consistent method resolution")
86
assert False, "nodict"
87
except TypeError as msg:
88
assert str(msg) == "extension type 'nodict.X' has no __dict__ slot, but base type 'Py' has: either add 'cdef dict __dict__' to the extension type or add '__slots__ = [...]' to the base type"
90
# old-style classes are regular classes in Py3, so this should just work: