cython

Форк
0
/
cpp_exceptions.pyx 
230 строк · 5.3 Кб
1
# mode: run
2
# tag: cpp, werror
3

4
cdef int raise_py_error() except *:
5
    raise TypeError("custom")
6

7
cdef extern from "cpp_exceptions_helper.h":
8
    cdef int raise_int_raw "raise_int"(bint fire) except +
9
    cdef int raise_int_value "raise_int"(bint fire) except +ValueError
10
    cdef int raise_int_custom "raise_int"(bint fire) except +raise_py_error
11

12
    cdef int raise_index_raw "raise_index"(bint fire) except +
13
    cdef int raise_index_value "raise_index"(bint fire) except +ValueError
14
    cdef int raise_index_custom "raise_index"(bint fire) except +raise_py_error
15

16
    cdef void raise_domain_error() except +
17
    cdef void raise_ios_failure() except +
18
    cdef void raise_memory() except +
19
    cdef void raise_overflow() except +
20
    cdef void raise_range_error() except +
21
    cdef void raise_typeerror() except +
22
    cdef void raise_underflow() except +
23

24
    cdef raise_or_throw(bint py) except +
25
    cdef int raise_or_throw_int(bint py) except +*
26

27
    cdef cppclass Foo:
28
        int bar_raw "bar"(bint fire) except +
29
        int bar_value "bar"(bint fire) except +ValueError
30
        int bar_custom "bar"(bint fire) except +raise_py_error
31

32

33
def test_domain_error():
34
    """
35
    >>> test_domain_error()
36
    Traceback (most recent call last):
37
    ...
38
    ValueError: domain_error
39
    """
40
    raise_domain_error()
41

42
def test_ios_failure():
43
    """
44
    >>> try: test_ios_failure()
45
    ... except (IOError, OSError): pass
46
    """
47
    raise_ios_failure()
48

49
def test_memory():
50
    """
51
    >>> test_memory()
52
    Traceback (most recent call last):
53
    ...
54
    MemoryError
55
    """
56
    # Re-raise the exception without a description string because we can't
57
    # rely on the implementation-defined value of what() in the doctest.
58
    try:
59
        raise_memory()
60
    except MemoryError:
61
        raise MemoryError
62

63
def test_overflow():
64
    """
65
    >>> test_overflow()
66
    Traceback (most recent call last):
67
    ...
68
    OverflowError: overflow_error
69
    """
70
    raise_overflow()
71

72
def test_range_error():
73
    """
74
    >>> test_range_error()
75
    Traceback (most recent call last):
76
    ...
77
    ArithmeticError: range_error
78
    """
79
    raise_range_error()
80

81
def test_typeerror():
82
    """
83
    >>> test_typeerror()
84
    Traceback (most recent call last):
85
    ...
86
    TypeError
87
    """
88
    # Re-raise the exception without a description string because we can't
89
    # rely on the implementation-defined value of what() in the doctest.
90
    try:
91
        raise_typeerror()
92
    except TypeError:
93
        raise TypeError
94

95
def test_underflow():
96
    """
97
    >>> test_underflow()
98
    Traceback (most recent call last):
99
    ...
100
    ArithmeticError: underflow_error
101
    """
102
    raise_underflow()
103

104
def test_func_that_can_raise_or_throw(bint py):
105
    """
106
    >>> test_func_that_can_raise_or_throw(0)
107
    Traceback (most recent call last):
108
    ...
109
    RuntimeError: oopsie
110
    >>> test_func_that_can_raise_or_throw(1)
111
    Traceback (most recent call last):
112
    ...
113
    ValueError: oopsie
114
    """
115
    raise_or_throw(py)
116

117
def test_func_that_can_raise_or_throw_c_return(bint py):
118
    """
119
    >>> test_func_that_can_raise_or_throw_c_return(0)
120
    Traceback (most recent call last):
121
    ...
122
    RuntimeError: oopsie
123
    >>> test_func_that_can_raise_or_throw_c_return(1)
124
    Traceback (most recent call last):
125
    ...
126
    ValueError: oopsie
127
    """
128
    raise_or_throw_int(py)
129

130
def test_int_raw(bint fire):
131
    """
132
    >>> test_int_raw(False)
133
    >>> test_int_raw(True)
134
    Traceback (most recent call last):
135
    ...
136
    RuntimeError: Unknown exception
137
    """
138
    raise_int_raw(fire)
139

140
def test_int_value(bint fire):
141
    """
142
    >>> test_int_value(False)
143
    >>> test_int_value(True)
144
    Traceback (most recent call last):
145
    ...
146
    ValueError
147
    """
148
    raise_int_value(fire)
149

150
def test_int_custom(bint fire):
151
    """
152
    >>> test_int_custom(False)
153
    >>> test_int_custom(True)
154
    Traceback (most recent call last):
155
    ...
156
    TypeError: custom
157
    """
158
    raise_int_custom(fire)
159

160
def test_index_raw(bint fire):
161
    """
162
    >>> test_index_raw(False)
163
    >>> test_index_raw(True)
164
    Traceback (most recent call last):
165
    ...
166
    IndexError: c++ error
167
    """
168
    raise_index_raw(fire)
169

170
def test_index_value(bint fire):
171
    """
172
    >>> test_index_value(False)
173
    >>> test_index_value(True)
174
    Traceback (most recent call last):
175
    ...
176
    ValueError: c++ error
177
    """
178
    raise_index_value(fire)
179

180
def test_index_custom(bint fire):
181
    """
182
    >>> test_index_custom(False)
183
    >>> test_index_custom(True)
184
    Traceback (most recent call last):
185
    ...
186
    TypeError: custom
187
    """
188
    raise_index_custom(fire)
189

190
def test_cppclass_method_raw(bint fire):
191
    """
192
    >>> test_cppclass_method_raw(False)
193
    >>> test_cppclass_method_raw(True)
194
    Traceback (most recent call last):
195
    ...
196
    RuntimeError: Unknown exception
197
    """
198
    foo = new Foo()
199
    try:
200
        foo.bar_raw(fire)
201
    finally:
202
        del foo
203

204
def test_cppclass_method_value(bint fire):
205
    """
206
    >>> test_cppclass_method_value(False)
207
    >>> test_cppclass_method_value(True)
208
    Traceback (most recent call last):
209
    ...
210
    ValueError
211
    """
212
    foo = new Foo()
213
    try:
214
        foo.bar_value(fire)
215
    finally:
216
        del foo
217

218
def test_cppclass_method_custom(bint fire):
219
    """
220
    >>> test_cppclass_method_custom(False)
221
    >>> test_cppclass_method_custom(True)
222
    Traceback (most recent call last):
223
    ...
224
    TypeError: custom
225
    """
226
    foo = new Foo()
227
    try:
228
        foo.bar_custom(fire)
229
    finally:
230
        del foo
231

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.