1# mode: run
2# tag: closures
3# preparse: id
4# preparse: def_to_cdef
5#
6# closure_tests_1.pyx
7#
8# Battery of tests for closures in Cython. Based on the collection of
9# compiler tests from P423/B629 at Indiana University, Spring 1999 and
10# Fall 2000. Special thanks to R. Kent Dybvig, Dan Friedman, Kevin
11# Millikin, and everyone else who helped to generate the original
12# tests. Converted into a collection of Python/Cython tests by Craig
13# Citro.
14#
15# Note: This set of tests is split (somewhat randomly) into several
16# files, simply because putting all the tests in a single file causes
17# gcc and g++ to buckle under the load.
18#
19
20def g1425():
21    """
22    >>> g1425()
23    142
24    """
25    if (True):
26      def g1424():
27        if (True):
28          return 122
29      return (20)+(g1424())
30    else:
31      return 10000
32
33
34def g1432():
35    """
36    >>> g1432()
37    [0, []]
38    """
39    def g1431():
40      return [0,[]]
41    x_1056 = g1431()
42    if (x_1056):
43      def g1430():
44        def g1429():
45          return (x_1056[0])
46        def g1428():
47          return (x_1056[0])
48        return (g1429())+(g1428())
49      x_1056[0] = g1430()
50    return x_1056
51
52
53def g1435():
54    """
55    >>> g1435()
56    4000
57    """
58    def g1434():
59      def g1433(y_1057):
60        return y_1057
61      return g1433
62    return g1434()(4000)
63
64
65def g1438():
66    """
67    >>> g1438()
68    1
69    """
70    def g1437():
71      def g1436(x_1058):
72        return x_1058
73      return g1436
74    f_1059 = g1437()
75    return (f_1059(0)+1)
76
77
78def g1441():
79    """
80    >>> g1441()
81    4
82    """
83    def g1440():
84      def g1439(y_1060):
85        return y_1060
86      return g1439
87    f_1061 = g1440()
88    return f_1061(f_1061(4))
89
90
91def g1446():
92    """
93    >>> g1446()
94    4
95    """
96    def g1445():
97      def g1444(f_1063):
98        return f_1063(f_1063(4))
99      return g1444
100    def g1443():
101      def g1442(y_1062):
102        return y_1062
103      return g1442
104    return g1445()(g1443())
105
106
107def g1449():
108    """
109    >>> g1449()
110    9000
111    """
112    def g1448():
113      a_1064 = 4000
114      def g1447(b_1065):
115        return (a_1064)+(b_1065)
116      return g1447
117    return g1448()(5000)
118
119
120def g1454():
121    """
122    >>> g1454()
123    9000
124    """
125    def g1453():
126      def g1452():
127        def g1450(a_1066):
128          def g1451(b_1067):
129            return (a_1066)+(b_1067)
130          return g1451
131        return g1450
132      return g1452()(4000)
133    return g1453()(5000)
134
135
136def g1459():
137    """
138    >>> g1459()
139    2
140    """
141    def g1458():
142      def g1457(f_1069):
143        return f_1069(f_1069(0))
144      return g1457
145    def g1456():
146      def g1455(x_1068):
147        return (x_1068+1)
148      return g1455
149    return g1458()(g1456())
150
151
152def g1462():
153    """
154    >>> g1462()
155    0
156    """
157    x_1072 = 0
158    def g1461():
159      def g1460(x_1070):
160        return x_1070
161      return g1460
162    f_1071 = g1461()
163    a_1075 = f_1071(x_1072)
164    b_1074 = f_1071(x_1072)
165    c_1073 = f_1071(x_1072)
166    return ((a_1075)+(b_1074))+(c_1073)
167
168
169def g1465():
170    """
171    >>> g1465()
172    3
173    """
174    x_1080 = 0
175    y_1079 = 1
176    z_1078 = 2
177    def g1464():
178      def g1463(x_1076):
179        return x_1076
180      return g1463
181    f_1077 = g1464()
182    a_1083 = f_1077(x_1080)
183    b_1082 = f_1077(y_1079)
184    c_1081 = f_1077(z_1078)
185    return ((a_1083)+(b_1082))+(c_1081)
186
187
188def g1468():
189    """
190    >>> g1468()
191    0
192    """
193    def g1467():
194      def g1466(x_1085, y_1084):
195        return x_1085
196      return g1466
197    f_1086 = g1467()
198    a_1087 = f_1086(0, 1)
199    return f_1086(a_1087, a_1087)
200
201
202def g1471():
203    """
204    >>> g1471()
205    0
206    """
207    x_1094 = 0
208    y_1093 = 1
209    z_1092 = 2
210    def g1470():
211      def g1469(x_1090, y_1089, z_1088):
212        return x_1090
213      return g1469
214    f_1091 = g1470()
215    a_1097 = f_1091(x_1094, y_1093, z_1092)
216    b_1096 = y_1093
217    c_1095 = z_1092
218    return f_1091(a_1097, b_1096, c_1095)
219
220
221def g1474():
222    """
223    >>> g1474()
224    3
225    """
226    def g1473():
227      def g1472(a_1101, b_1100, c_1099, d_1098):
228        return (a_1101)+(d_1098)
229      return g1472
230    f_1102 = g1473()
231    return f_1102(0, 1, 2, 3)
232
233
234def g1478():
235    """
236    >>> g1478()
237    3
238    """
239    def g1477():
240      def g1476(x_1103):
241        return x_1103
242      return g1476
243    f_1104 = g1477()
244    def g1475():
245      a_1107 = 0
246      b_1106 = 1
247      c_1105 = 2
248      return (f_1104(a_1107))+((f_1104(b_1106))+(f_1104(c_1105)))
249    return (f_1104(0))+(g1475())
250
251
252def g1483():
253    """
254    >>> g1483()
255    """
256    a_1108 = 0
257    def g1482():
258      def g1481():
259        return 0
260      return g1481
261    a_1110 = g1482()
262    def g1480():
263      def g1479():
264        return 11
265      return g1479
266    b_1109 = g1480()
267    a_1110 = 11
268
269
270def g1486():
271    """
272    >>> g1486()
273    """
274    a_1111 = 0
275    def g1485():
276      def g1484():
277        a_1113 = 0
278      return g1484
279    a_1113 = g1485()
280    b_1112 = 11
281    return a_1113()
282
283
284def g1491():
285    """
286    >>> g1491()
287    0
288    """
289    def g1490():
290      def g1489():
291        return 0
292      return g1489
293    a_1115 = g1490()
294    def g1488():
295      def g1487():
296        return 11
297      return g1487
298    b_1114 = g1488()
299    return a_1115()
300
301
302def g1494():
303    """
304    >>> g1494()
305    2
306    """
307    def g1493():
308      x_1116 = 1
309      def g1492(y_1117):
310        return (x_1116)+(y_1117)
311      return g1492
312    f_1118 = g1493()
313    x_1119 = 0
314    return f_1118(f_1118(x_1119))
315
316
317def g1501():
318    """
319    >>> g1501()
320    3050
321    """
322    def g1500():
323      def g1499():
324        def g1498(x_1121):
325          return (x_1121)+(50)
326        return g1498
327      t_1122 = g1499()
328      def g1497(f_1123):
329        return t_1122(f_1123(1000))
330      return g1497
331    def g1496():
332      def g1495(y_1120):
333        return (y_1120)+(2000)
334      return g1495
335    return g1500()(g1496())
336
337
338def g1508():
339    """
340    >>> g1508()
341    60
342    """
343    def g1507():
344      def g1506():
345        def g1505():
346          def g1502(a_1124):
347            def g1503(b_1125):
348              def g1504(c_1126):
349                return (a_1124)+((b_1125)+(c_1126))
350              return g1504
351            return g1503
352          return g1502
353        return g1505()(10)
354      return g1506()(20)
355    return g1507()(30)
356
357
358def g1513():
359    """
360    >>> g1513()
361    5
362    """
363    def g1512():
364      def g1509(b_1127):
365        def g1511():
366          def g1510(a_1128):
367            return (b_1127)+(a_1128)
368          return g1510
369        return g1511()(2)
370      return g1509
371    return g1512()(3)
372
373
374def g1518():
375    """
376    >>> g1518()
377    5
378    """
379    def g1517():
380      def g1516(f_1130):
381        return f_1130(f_1130(5))
382      return g1516
383    def g1515():
384      def g1514(x_1129):
385        return x_1129
386      return g1514
387    return g1517()(g1515())
388
389
390def g1523():
391    """
392    >>> g1523()
393    8000
394    """
395    def g1522():
396      def g1521():
397        def g1520(x_1131):
398          return (x_1131)+(3000)
399        return g1520
400      f_1132 = g1521()
401      def g1519(y_1133):
402        return f_1132(f_1132(y_1133))
403      return g1519
404    return g1522()(2000)
405
406