1# mode: run
2# tag: closures, lambda
3
4# Battery of tests for closures in Cython. Based on the collection of
5# compiler tests from P423/B629 at Indiana University, Spring 1999 and
6# Fall 2000. Special thanks to R. Kent Dybvig, Dan Friedman, Kevin
7# Millikin, and everyone else who helped to generate the original
8# tests. Converted into a collection of Python/Cython tests by Craig
9# Citro.
10#
11# Note: This set of tests is split (somewhat randomly) into several
12# files, simply because putting all the tests in a single file causes
13# gcc and g++ to buckle under the load.
14#
15
16
17def g0():
18    """
19    >>> g0()
20    4000
21    """
22    return (lambda y_1: y_1)(4000)
23
24
25def g1():
26    """
27    >>> g1()
28    1
29    """
30    f_3 = (lambda x_2: x_2)
31    return (f_3(0)+1)
32
33
34def g2():
35    """
36    >>> g2()
37    4
38    """
39    f_5 = (lambda y_4: y_4)
40    return f_5(f_5(4))
41
42
43def g3():
44    """
45    >>> g3()
46    4
47    """
48    return (lambda f_7: f_7(f_7(4)))((lambda y_6: y_6))
49
50
51def g5():
52    """
53    >>> g5()
54    9000
55    """
56    def g4():
57      a_8 = 4000
58      return lambda b_9: ((a_8)+(b_9))
59    return g4()(5000)
60
61
62def g6():
63    """
64    >>> g6()
65    9000
66    """
67    return (lambda a_10: (lambda b_11: (a_10)+(b_11)))(4000)(5000)
68
69
70def g7():
71    """
72    >>> g7()
73    2
74    """
75    return (lambda f_13: f_13(f_13(0)))((lambda x_12: (x_12+1)))
76
77
78def g8():
79    """
80    >>> g8()
81    0
82    """
83    f_16 = (lambda x_15, y_14: x_15)
84    a_17 = f_16(0, 1)
85    return f_16(a_17, a_17)
86
87
88def g10():
89    """
90    >>> g10()
91    3
92    """
93    f_19 = (lambda x_18: x_18)
94    def g9():
95      a_22 = 0
96      b_21 = 1
97      c_20 = 2
98      return (f_19(a_22))+((f_19(b_21))+(f_19(c_20)))
99    return (f_19(0))+(g9())
100
101
102def g12():
103    """
104    >>> g12()
105    2
106    """
107    def g11():
108      x_23 = 1
109      return lambda y_24: ((x_23)+(y_24))
110    f_25 = g11()
111    x_26 = 0
112    return f_25(f_25(x_26))
113
114
115def g14():
116    """
117    >>> g14()
118    3050
119    """
120    def g13():
121      t_29 = (lambda x_28: (x_28)+(50))
122      return lambda f_30: (t_29(f_30(1000)))
123    return g13()((lambda y_27: (y_27)+(2000)))
124
125
126def g15():
127    """
128    >>> g15()
129    3050
130    """
131    return (lambda t_33: (lambda f_34: t_33(f_34(1000))))((lambda x_32: (x_32)+(50)))((lambda y_31: (y_31)+(2000)))
132
133
134def g17():
135    """
136    >>> g17()
137    2050
138    """
139    def g16():
140      t_35 = 50
141      return lambda f_36: ((t_35)+(f_36()))
142    return g16()((lambda : 2000))
143
144
145def g18():
146    """
147    >>> g18()
148    2050
149    """
150    return (lambda t_37: (lambda f_38: (t_37)+(f_38())))(50)((lambda : 2000))
151
152
153def g20():
154    """
155    >>> g20()
156    700
157    """
158    def g19():
159      x_39 = 300
160      return lambda y_40: ((x_39)+(y_40))
161    return g19()(400)
162
163
164def g21():
165    """
166    >>> g21()
167    0
168    """
169    x_44 = 3
170    f_43 = (lambda x_42, y_41: x_42)
171    if (f_43(0, 0)):
172      return f_43(f_43(0, 0), x_44)
173    else:
174      return 0
175
176
177def g22():
178    """
179    >>> g22()
180    False
181    """
182    f_46 = (lambda x_45: (x_45) if (((not ((x_45[0]) == 0))) if (isinstance(x_45, list)) else (False)) else (False))
183    return f_46([0,[0,[]]])
184
185
186def g23():
187    """
188    >>> g23()
189    False
190    """
191    f_48 = (lambda x_47: (x_47) if (((not ((not ((x_47[0]) == 0))) if (isinstance(x_47, list)) else (False))) if (x_47) else (False)) else (False))
192    return f_48(0)
193
194
195def g24():
196    """
197    >>> g24()
198    []
199    """
200    f_50 = (lambda x_49: (x_49) if ((True) if (isinstance(x_49, list)) else ((x_49 == []))) else ([]))
201    return f_50(0)
202
203
204def g25():
205    """
206    >>> g25()
207    0
208    """
209    y_51 = 4
210    f_54 = (lambda x_53, y_52: 0)
211    return f_54(f_54(y_51, y_51), f_54(y_51, y_51))
212
213
214def g26():
215    """
216    >>> g26()
217    0
218    """
219    y_55 = 4
220    f_58 = (lambda x_57, y_56: 0)
221    return f_58(f_58(y_55, f_58(y_55, y_55)), f_58(y_55, f_58(y_55, y_55)))
222
223
224def g27():
225    """
226    >>> g27()
227    4
228    """
229    return (lambda y_59: (lambda f_61: f_61(f_61(y_59)))((lambda y_60: y_60)))(4)
230
231
232def g28():
233    """
234    >>> g28()
235    23
236    """
237    f_63 = (lambda x_62: x_62)
238    return ((1) if (False) else (f_63(22))+1)
239
240
241def g29():
242    """
243    >>> g29()
244    5061
245    """
246    f_68 = (lambda x_65: ((not x_65)) if (x_65) else (x_65))
247    f2_67 = (lambda x_64: (10)*(x_64))
248    x_66 = 23
249    return ((1) if (f_68(x_66 == 0)) else ((x_66)*(f2_67((x_66-1))))+1)
250
251
252def g30():
253    """
254    >>> g30()
255    1
256    """
257    one_69 = (lambda n_70: (1) if (n_70 == 0) else (one_69((n_70-1))))
258    return one_69(13)
259
260
261def g31():
262    """
263    >>> g31()
264    True
265    """
266    even_72 = (lambda x_74: (True) if (x_74 == 0) else (odd_71((x_74-1))))
267    odd_71 = (lambda x_73: (False) if (x_73 == 0) else (even_72((x_73-1))))
268    return odd_71(13)
269
270
271def g32():
272    """
273    >>> g32()
274    False
275    """
276    even_76 = (lambda x_78: (True) if (x_78 == 0) else (odd_75((x_78-1))))
277    odd_75 = (lambda x_77: (False) if (x_77 == 0) else (even_76((x_77-1))))
278    return even_76(13)
279
280
281def g34():
282    """
283    >>> g34()
284    True
285    """
286    even_80 = (lambda x_79: x_79)
287    def g33():
288      even_82 = (lambda x_84: (True) if (x_84 == 0) else (odd_81((x_84-1))))
289      odd_81 = (lambda x_83: (False) if (x_83 == 0) else (even_82((x_83-1))))
290      return odd_81(13)
291    return even_80(g33())
292
293
294def g35():
295    """
296    >>> g35()
297    120
298    """
299    fact_85 = (lambda n_86: (1) if (n_86 == 0) else ((n_86)*(fact_85((n_86-1)))))
300    return fact_85(5)
301
302
303def g38():
304    """
305    >>> g38()
306    10
307    """
308    x_87 = 5
309    a_90 = (lambda u_101, v_100, w_99: (b_89(v_100, w_99)) if (u_101 == 0) else (a_90((u_101)-(1), v_100, w_99)))
310    def g37():
311      def g36(q_93, r_92):
312        p_94 = (q_93)*(r_92)
313        e_96 = (lambda n_98: (c_88(p_94)) if (n_98 == 0) else (o_95((n_98)-(1))))
314        o_95 = (lambda n_97: (c_88(x_87)) if (n_97 == 0) else (e_96((n_97)-(1))))
315        return e_96((q_93)*(r_92))
316      return g36
317    b_89 = g37()
318    c_88 = (lambda x_91: (5)*(x_91))
319    return a_90(3, 2, 1)
320
321
322def g39():
323    """
324    >>> g39()
325    120
326    """
327    fact_104 = (lambda fact_103, n_102: (1) if (n_102 == 0) else ((fact_103(fact_103, (n_102-1)))*(n_102)))
328    return fact_104(fact_104, 5)
329
330
331def g40():
332    """
333    >>> g40()
334    35
335    """
336    return (lambda x_105: (lambda y_106: (lambda z_107: (lambda w_108: (lambda u_109: (x_105)+((y_106)+((z_107)+((w_108)+(u_109)))))))))(5)(6)(7)(8)(9)
337
338
339def g41():
340    """
341    >>> g41()
342    6
343    """
344    sum_112 = (lambda sum_111, ls_110: (0) if ((ls_110 == [])) else (((ls_110[0]))+(sum_111(sum_111, (ls_110[1])))))
345    return sum_112(sum_112, [1,[2,[3,[]]]])
346
347
348def g46():
349    """
350    >>> g46()
351    1500
352    """
353    def g45():
354      def g44():
355        def g42(a_113):
356          def g43():
357            (a_113)+(200 if True else None)
358            return 1500
359          return g43
360        return g42
361      return g44()(1000)
362    return g45()()
363
364
365def g53():
366    """
367    >>> g53()
368    2600
369    """
370    def g52():
371      def g51():
372        def g50():
373          def g47(a_114):
374            def g48(b_115):
375              a_114 = 200 if b_115 else None
376              def g49(c_116):
377                c_116 = 400 if 300 else None
378                return (a_114)+((b_115)+(c_116))
379              return g49
380            return g48
381          return g47
382        return g50()(1000)
383      return g51()(2000)
384    return g52()(3000)
385
386
387def g54():
388    """
389    >>> g54()
390    5
391    """
392    return (lambda f_118: f_118(f_118(5)))((lambda x_117: x_117))
393
394
395def g56():
396    """
397    >>> g56()
398    8000
399    """
400    def g55():
401      f_120 = (lambda x_119: (x_119)+(3000))
402      return lambda y_121: (f_120(f_120(y_121)))
403    return g55()(2000)
404
405
406def g57():
407    """
408    >>> g57()
409    120
410    """
411    fact_125 = (lambda fact_124, n_123, acc_122: (acc_122) if (n_123 == 0) else (fact_124(fact_124, (n_123-1), (n_123)*(acc_122))))
412    return fact_125(fact_125, 5, 1)
413
414
415def g58():
416    """
417    >>> g58()
418    3
419    """
420    f_127 = (lambda x_126: (lambda : x_126()))
421    return f_127((lambda : 3))()
422
423
424def g59():
425    """
426    >>> g59()
427    22
428    """
429    f_129 = (lambda x_132: (x_132)+((lambda y_133: (lambda z_134: (y_133)+(z_134)))(6)(7)))
430    g_128 = (5)+((lambda w_131, u_130: (w_131)+(u_130))(8, 9))
431    return g_128
432
433
434def g60():
435    """
436    >>> g60()
437    0
438    """
439    loop_135 = (lambda : (lambda : loop_135()))
440    loop_135()
441    return 0
442
443
444def g63():
445    """
446    >>> g63()
447    668
448    """
449    def g62():
450      def g61():
451        loop_137 = (lambda link_138: (lambda : link_138()))
452        return loop_137((lambda : 668))
453      return g61
454    f_136 = g62()
455    return f_136()()
456
457
458def g64():
459    """
460    >>> g64()
461    17
462    """
463    k_141 = (lambda x_140, y_139: x_140)
464    b_142 = 17
465    return k_141(k_141(k_141, 37), 37)(b_142, (b_142)*(b_142))
466
467
468def g65():
469    """
470    >>> g65()
471    37
472    """
473    f_145 = (lambda g_144, u_143: g_144((g_144(37)) if (u_143) else (u_143)))
474    return f_145((lambda x_146: x_146), 75)
475
476
477def g66():
478    """
479    >>> g66()
480    4687
481    """
482    f_150 = (lambda h_148, u_147: h_148((h_148((u_147)+(37))) if (u_147) else (u_147)))
483    w_149 = 62
484    return f_150((lambda x_151: (w_149)-(x_151)), (75)*(w_149))
485
486
487def g67():
488    """
489    >>> g67()
490    True
491    """
492    t_153 = True
493    f_152 = False
494    bools_156 = [t_153,f_152]
495    id_155 = (lambda x_154: (f_152) if ((not x_154)) else (t_153))
496    even_158 = (lambda x_160: ((bools_156[0])) if (id_155(x_160 == 0)) else (odd_157((x_160)-(1))))
497    odd_157 = (lambda y_159: (id_155((bools_156[1]))) if (y_159 == 0) else (even_158((y_159)-(1))))
498    return odd_157(5)
499
500
501def g68():
502    """
503    >>> g68()
504    5
505    """
506    f_162 = (lambda x_164: (x_164)+(1))
507    g_161 = (lambda y_163: f_162(f_162(y_163)))
508    return (f_162(1))+(g_161(1))
509
510
511def g69():
512    """
513    >>> g69()
514    1521
515    """
516    y_165 = 3
517    f_168 = (lambda x_171: (g_167((x_171)+(1))) if (x_171 == 0) else (f_168((x_171)-(y_165))))
518    g_167 = (lambda x_170: h_166((x_170)*(x_170)))
519    h_166 = (lambda x_169: x_169)
520    return g_167(39)
521
522
523def g70():
524    """
525    >>> g70()
526    -1
527    """
528    f_173 = (lambda x_175: (x_175)+(1))
529    g_172 = (lambda y_174: f_173(f_173(y_174)))
530    f_173 = (lambda x_176: (x_176)-(1))
531    return (f_173(1))+(g_172(1))
532
533
534def g71():
535    """
536    >>> g71()
537    [52, [17, [35, [17, 35]]]]
538    """
539    f_180 = (lambda : (a_179)+(b_178))
540    a_179 = 17
541    b_178 = 35
542    h_177 = [(lambda : a_179),(lambda : b_178)]
543    return [f_180(),[a_179,[b_178,[(h_177[0])(),(h_177[1])()]]]]
544
545
546def g73():
547    """
548    >>> g73()
549    120
550    """
551    x_183 = 5
552    def g72():
553      a_181 = 1
554      return lambda : (a_181)
555    th_182 = g72()
556    fact_184 = (lambda n_186, th_185: (th_185()) if (n_186 == 0) else ((n_186)*(fact_184((n_186)-(1), th_185))))
557    return fact_184(x_183, th_182)
558
559
560def g74():
561    """
562    >>> g74()
563    [120, -120]
564    """
565    negative_188 = (lambda n_187: (n_187 < 0))
566    fact_190 = (lambda n_192: (1) if (n_192 == 0) else ((n_192)*(fact_190((n_192)-(1)))))
567    call_fact_189 = (lambda n_191: (fact_190(n_191)) if ((not negative_188(n_191))) else ((0)-(fact_190((0)-(n_191)))))
568    return [call_fact_189(5),call_fact_189(-5)]
569
570
571def g75():
572    """
573    >>> g75()
574    [[33, 55], [77, 99]]
575    """
576    return (lambda a_193: (lambda b_194: (lambda c_195: (lambda d_196: [[a_193,b_194],[c_195,d_196]]))))(33)(55)(77)(99)
577
578