cython

Форк
0
/
exceptions_nogil.pyx 
422 строки · 6.9 Кб
1
# mode: run
2
# tag: nogil, withgil, exceptions
3

4
cdef void foo_nogil(int i) except * nogil:
5
    if i != 0: raise ValueError("huhu !")
6

7

8
cdef void foo(int i) except * with gil:
9
    if i != 0: raise ValueError
10

11

12
cdef int bar(int i) except? -1 with gil:
13
    if i != 0: raise ValueError
14
    return 0
15

16

17
cdef int spam(int i) except? -1 with gil:
18
    if i != 0: raise TypeError
19
    return -1
20

21

22
def test_foo_nogil():
23
    """
24
    >>> test_foo_nogil()
25
    """
26
    #
27
    foo_nogil(0)
28
    foo_nogil(0)
29
    with nogil:
30
        foo_nogil(0)
31
        foo_nogil(0)
32
    #
33
    try:
34
        with nogil:
35
            foo_nogil(0)
36
    finally:
37
        pass
38
    #
39
    try:
40
        with nogil:
41
            foo_nogil(0)
42
        with nogil:
43
            foo_nogil(0)
44
    finally:
45
        pass
46
    #
47
    try:
48
        with nogil:
49
            foo_nogil(0)
50
        with nogil:
51
            foo_nogil(1)
52
    except:
53
        with nogil:
54
            foo_nogil(0)
55
    finally:
56
        with nogil:
57
            foo_nogil(0)
58
        pass
59
    #
60
    try:
61
        with nogil:
62
            foo_nogil(0)
63
            foo_nogil(0)
64
    finally:
65
        pass
66
    #
67
    try:
68
        with nogil:
69
            foo_nogil(0)
70
            foo_nogil(1)
71
    except:
72
        with nogil:
73
            foo_nogil(0)
74
    finally:
75
        with nogil:
76
            foo_nogil(0)
77
        pass
78
    #
79
    try:
80
        with nogil:
81
            foo_nogil(0)
82
        try:
83
            with nogil:
84
                foo_nogil(1)
85
        except:
86
            with nogil:
87
                foo_nogil(1)
88
        finally:
89
            with nogil:
90
                foo_nogil(0)
91
            pass
92
    except:
93
        with nogil:
94
            foo_nogil(0)
95
    finally:
96
        with nogil:
97
            foo_nogil(0)
98
        pass
99
    #
100
    try:
101
        with nogil:
102
            foo_nogil(0)
103
        try:
104
            with nogil:
105
                foo_nogil(1)
106
        except:
107
            with nogil:
108
                foo_nogil(1)
109
        finally:
110
            with nogil:
111
                foo_nogil(1)
112
            pass
113
    except:
114
        with nogil:
115
            foo_nogil(0)
116
    finally:
117
        with nogil:
118
            foo_nogil(0)
119
        pass
120
    #
121

122

123
def test_foo():
124
    """
125
    >>> test_foo()
126
    """
127
    #
128
    foo(0)
129
    foo(0)
130
    with nogil:
131
        foo(0)
132
        foo(0)
133
    #
134
    try:
135
        with nogil:
136
            foo(0)
137
    finally:
138
        pass
139
    #
140
    try:
141
        with nogil:
142
            foo(0)
143
        with nogil:
144
            foo(0)
145
    finally:
146
        pass
147
    #
148
    try:
149
        with nogil:
150
            foo(0)
151
        with nogil:
152
            foo(1)
153
    except:
154
        with nogil:
155
            foo(0)
156
    finally:
157
        with nogil:
158
            foo(0)
159
        pass
160
    #
161
    try:
162
        with nogil:
163
            foo(0)
164
            foo(0)
165
    finally:
166
        pass
167
    #
168
    try:
169
        with nogil:
170
            foo(0)
171
            foo(1)
172
    except:
173
        with nogil:
174
            foo(0)
175
    finally:
176
        with nogil:
177
            foo(0)
178
        pass
179
    #
180
    try:
181
        with nogil:
182
            foo(0)
183
        try:
184
            with nogil:
185
                foo(1)
186
        except:
187
            with nogil:
188
                foo(1)
189
        finally:
190
            with nogil:
191
                foo(0)
192
            pass
193
    except:
194
        with nogil:
195
            foo(0)
196
    finally:
197
        with nogil:
198
            foo(0)
199
        pass
200
    #
201
    try:
202
        with nogil:
203
            foo(0)
204
        try:
205
            with nogil:
206
                foo(1)
207
        except:
208
            with nogil:
209
                foo(1)
210
        finally:
211
            with nogil:
212
                foo(1)
213
            pass
214
    except:
215
        with nogil:
216
            foo(0)
217
    finally:
218
        with nogil:
219
            foo(0)
220
        pass
221
    #
222

223

224
def test_bar():
225
    """
226
    >>> test_bar()
227
    """
228
    #
229
    bar(0)
230
    bar(0)
231
    with nogil:
232
        bar(0)
233
        bar(0)
234
    #
235
    try:
236
        with nogil:
237
            bar(0)
238
    finally:
239
        pass
240
    #
241
    try:
242
        with nogil:
243
            bar(0)
244
        with nogil:
245
            bar(0)
246
    finally:
247
        pass
248
    #
249
    try:
250
        with nogil:
251
            bar(0)
252
        with nogil:
253
            bar(1)
254
    except ValueError:
255
        with nogil:
256
            bar(0)
257
    finally:
258
        with nogil:
259
            bar(0)
260
        pass
261
    #
262
    try:
263
        with nogil:
264
            bar(0)
265
            bar(0)
266
    finally:
267
        pass
268
    #
269
    try:
270
        with nogil:
271
            bar(0)
272
            bar(1)
273
    except ValueError:
274
        with nogil:
275
            bar(0)
276
    finally:
277
        with nogil:
278
            bar(0)
279
        pass
280
    #
281
    try:
282
        with nogil:
283
            bar(0)
284
        try:
285
            with nogil:
286
                bar(1)
287
        except ValueError:
288
            with nogil:
289
                bar(1)
290
        finally:
291
            with nogil:
292
                bar(0)
293
            pass
294
    except ValueError:
295
        with nogil:
296
            bar(0)
297
    finally:
298
        with nogil:
299
            bar(0)
300
        pass
301
    #
302
    try:
303
        with nogil:
304
            bar(0)
305
        try:
306
            with nogil:
307
                bar(1)
308
        except ValueError:
309
            with nogil:
310
                bar(1)
311
        finally:
312
            with nogil:
313
                bar(1)
314
            pass
315
    except ValueError:
316
        with nogil:
317
            bar(0)
318
    finally:
319
        with nogil:
320
            bar(0)
321
        pass
322
    #
323

324
def test_spam():
325
    """
326
    >>> test_spam()
327
    """
328
    #
329
    spam(0)
330
    spam(0)
331
    with nogil:
332
        spam(0)
333
        spam(0)
334
    #
335
    try:
336
        with nogil:
337
            spam(0)
338
    finally:
339
        pass
340
    #
341
    try:
342
        with nogil:
343
            spam(0)
344
        with nogil:
345
            spam(0)
346
    finally:
347
        pass
348
    #
349
    try:
350
        with nogil:
351
            spam(0)
352
        with nogil:
353
            spam(1)
354
    except TypeError:
355
        with nogil:
356
            spam(0)
357
    finally:
358
        with nogil:
359
            spam(0)
360
        pass
361
    #
362
    try:
363
        with nogil:
364
            spam(0)
365
            spam(0)
366
    finally:
367
        pass
368
    #
369
    try:
370
        with nogil:
371
            spam(0)
372
            spam(1)
373
    except TypeError:
374
        with nogil:
375
            spam(0)
376
    finally:
377
        with nogil:
378
            spam(0)
379
        pass
380
    #
381
    try:
382
        with nogil:
383
            spam(0)
384
        try:
385
            with nogil:
386
                spam(1)
387
        except TypeError:
388
            with nogil:
389
                spam(1)
390
        finally:
391
            with nogil:
392
                spam(0)
393
            pass
394
    except TypeError:
395
        with nogil:
396
            spam(0)
397
    finally:
398
        with nogil:
399
            spam(0)
400
        pass
401
    #
402
    try:
403
        with nogil:
404
            spam(0)
405
        try:
406
            with nogil:
407
                spam(1)
408
        except TypeError:
409
            with nogil:
410
                spam(1)
411
        finally:
412
            with nogil:
413
                spam(1)
414
            pass
415
    except TypeError:
416
        with nogil:
417
            spam(0)
418
    finally:
419
        with nogil:
420
            spam(0)
421
        pass
422
    #
423

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

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

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

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