summaryrefslogtreecommitdiff
path: root/tests/run/pure_pxd.srctree
blob: 59c71cdf62be2778d525726bf2540b61c81ec596 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
PYTHON setup.py build_ext --inplace
PYTHON -c "import a; a.test(a)"

######## setup.py ########

from Cython.Build.Dependencies import cythonize

from distutils.core import setup

setup(
    ext_modules=cythonize("a.py"),
)


######## a.py ########

class ExtTypePass(object):
    pass


class ExtTypePxdDocstring(object):
    pass


class ExtTypeDocstring(object):
    """huhu!"""  # this should override the .pxd docstring


class ExtTypeAttributes(object):
    """
    >>> x = ExtTypeAttributes()
    >>> x.b
    [1, 2, 3]
    """
    def __init__(self):
        self.a = 123
        self.b = [1, 2, 3]


class TypedMethod():
    """
    >>> t = TypedMethod()
    >>> t.meth()
    97
    """
    def meth(self):
        x = bytearray(b'abcdefg')
        return x[0]


def func(a, b, c):
    """
    >>> func(1, 2, 3)
    6
    """
    return a + b + c


def test(module):
    import os.path
    assert not os.path.basename(__file__).endswith('.py'), __file__
    assert not os.path.basename(__file__).endswith('.pyc'), __file__
    assert not os.path.basename(__file__).endswith('.pyo'), __file__

    assert not ExtTypePass().__doc__, ExtTypePass().__doc__
    assert ExtTypeDocstring().__doc__ == "huhu!", ExtTypeDocstring().__doc__
    assert ExtTypePxdDocstring().__doc__ == "ho, ho, ho!", ExtTypePxdDocstring().__doc__
    assert '>>> ' in func.__doc__

    import doctest
    result = doctest.testmod(module, verbose=True)
    assert not result.failed, result.failed


######## a.pxd ########

cimport cython

cdef class ExtTypePass:
    pass


cdef class ExtTypePxdDocstring:
    """ho, ho, ho!"""


cdef class ExtTypeAttributes:
    cdef int a
    cdef readonly list b


cdef class TypedMethod:
    @cython.locals(x='char[:]')
    cpdef meth(self)


cpdef int func(x, int y, z) except? -1  # argument names should not matter, types should