cython
1# mode: run
2# tag: nogil, withgil, exceptions
3
4cdef void foo_nogil(int i) except * nogil:
5if i != 0: raise ValueError("huhu !")
6
7
8cdef void foo(int i) except * with gil:
9if i != 0: raise ValueError
10
11
12cdef int bar(int i) except? -1 with gil:
13if i != 0: raise ValueError
14return 0
15
16
17cdef int spam(int i) except? -1 with gil:
18if i != 0: raise TypeError
19return -1
20
21
22def test_foo_nogil():
23"""
24>>> test_foo_nogil()
25"""
26#
27foo_nogil(0)
28foo_nogil(0)
29with nogil:
30foo_nogil(0)
31foo_nogil(0)
32#
33try:
34with nogil:
35foo_nogil(0)
36finally:
37pass
38#
39try:
40with nogil:
41foo_nogil(0)
42with nogil:
43foo_nogil(0)
44finally:
45pass
46#
47try:
48with nogil:
49foo_nogil(0)
50with nogil:
51foo_nogil(1)
52except:
53with nogil:
54foo_nogil(0)
55finally:
56with nogil:
57foo_nogil(0)
58pass
59#
60try:
61with nogil:
62foo_nogil(0)
63foo_nogil(0)
64finally:
65pass
66#
67try:
68with nogil:
69foo_nogil(0)
70foo_nogil(1)
71except:
72with nogil:
73foo_nogil(0)
74finally:
75with nogil:
76foo_nogil(0)
77pass
78#
79try:
80with nogil:
81foo_nogil(0)
82try:
83with nogil:
84foo_nogil(1)
85except:
86with nogil:
87foo_nogil(1)
88finally:
89with nogil:
90foo_nogil(0)
91pass
92except:
93with nogil:
94foo_nogil(0)
95finally:
96with nogil:
97foo_nogil(0)
98pass
99#
100try:
101with nogil:
102foo_nogil(0)
103try:
104with nogil:
105foo_nogil(1)
106except:
107with nogil:
108foo_nogil(1)
109finally:
110with nogil:
111foo_nogil(1)
112pass
113except:
114with nogil:
115foo_nogil(0)
116finally:
117with nogil:
118foo_nogil(0)
119pass
120#
121
122
123def test_foo():
124"""
125>>> test_foo()
126"""
127#
128foo(0)
129foo(0)
130with nogil:
131foo(0)
132foo(0)
133#
134try:
135with nogil:
136foo(0)
137finally:
138pass
139#
140try:
141with nogil:
142foo(0)
143with nogil:
144foo(0)
145finally:
146pass
147#
148try:
149with nogil:
150foo(0)
151with nogil:
152foo(1)
153except:
154with nogil:
155foo(0)
156finally:
157with nogil:
158foo(0)
159pass
160#
161try:
162with nogil:
163foo(0)
164foo(0)
165finally:
166pass
167#
168try:
169with nogil:
170foo(0)
171foo(1)
172except:
173with nogil:
174foo(0)
175finally:
176with nogil:
177foo(0)
178pass
179#
180try:
181with nogil:
182foo(0)
183try:
184with nogil:
185foo(1)
186except:
187with nogil:
188foo(1)
189finally:
190with nogil:
191foo(0)
192pass
193except:
194with nogil:
195foo(0)
196finally:
197with nogil:
198foo(0)
199pass
200#
201try:
202with nogil:
203foo(0)
204try:
205with nogil:
206foo(1)
207except:
208with nogil:
209foo(1)
210finally:
211with nogil:
212foo(1)
213pass
214except:
215with nogil:
216foo(0)
217finally:
218with nogil:
219foo(0)
220pass
221#
222
223
224def test_bar():
225"""
226>>> test_bar()
227"""
228#
229bar(0)
230bar(0)
231with nogil:
232bar(0)
233bar(0)
234#
235try:
236with nogil:
237bar(0)
238finally:
239pass
240#
241try:
242with nogil:
243bar(0)
244with nogil:
245bar(0)
246finally:
247pass
248#
249try:
250with nogil:
251bar(0)
252with nogil:
253bar(1)
254except ValueError:
255with nogil:
256bar(0)
257finally:
258with nogil:
259bar(0)
260pass
261#
262try:
263with nogil:
264bar(0)
265bar(0)
266finally:
267pass
268#
269try:
270with nogil:
271bar(0)
272bar(1)
273except ValueError:
274with nogil:
275bar(0)
276finally:
277with nogil:
278bar(0)
279pass
280#
281try:
282with nogil:
283bar(0)
284try:
285with nogil:
286bar(1)
287except ValueError:
288with nogil:
289bar(1)
290finally:
291with nogil:
292bar(0)
293pass
294except ValueError:
295with nogil:
296bar(0)
297finally:
298with nogil:
299bar(0)
300pass
301#
302try:
303with nogil:
304bar(0)
305try:
306with nogil:
307bar(1)
308except ValueError:
309with nogil:
310bar(1)
311finally:
312with nogil:
313bar(1)
314pass
315except ValueError:
316with nogil:
317bar(0)
318finally:
319with nogil:
320bar(0)
321pass
322#
323
324def test_spam():
325"""
326>>> test_spam()
327"""
328#
329spam(0)
330spam(0)
331with nogil:
332spam(0)
333spam(0)
334#
335try:
336with nogil:
337spam(0)
338finally:
339pass
340#
341try:
342with nogil:
343spam(0)
344with nogil:
345spam(0)
346finally:
347pass
348#
349try:
350with nogil:
351spam(0)
352with nogil:
353spam(1)
354except TypeError:
355with nogil:
356spam(0)
357finally:
358with nogil:
359spam(0)
360pass
361#
362try:
363with nogil:
364spam(0)
365spam(0)
366finally:
367pass
368#
369try:
370with nogil:
371spam(0)
372spam(1)
373except TypeError:
374with nogil:
375spam(0)
376finally:
377with nogil:
378spam(0)
379pass
380#
381try:
382with nogil:
383spam(0)
384try:
385with nogil:
386spam(1)
387except TypeError:
388with nogil:
389spam(1)
390finally:
391with nogil:
392spam(0)
393pass
394except TypeError:
395with nogil:
396spam(0)
397finally:
398with nogil:
399spam(0)
400pass
401#
402try:
403with nogil:
404spam(0)
405try:
406with nogil:
407spam(1)
408except TypeError:
409with nogil:
410spam(1)
411finally:
412with nogil:
413spam(1)
414pass
415except TypeError:
416with nogil:
417spam(0)
418finally:
419with nogil:
420spam(0)
421pass
422#
423