1# mode: run
2# tag: closures
3# preparse: id
4# preparse: def_to_cdef
5#
6# closure_tests_4.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
20
21def g1852():
22    """
23    >>> g1852()
24    [3, 42]
25    """
26    def g1851():
27      def g1850(x_1333):
28        x_1334 = 3
29        return 3
30      return g1850
31    f_1332 = g1851()
32    def g1848():
33      def g1847(x_1336):
34        y_1337 = 14
35        y_1337 = 7
36        return y_1337
37      return g1847
38    g_1335 = g1848()
39    def g1849():
40      return [g_1335,3]
41    g_1335 = g1849()
42    def g1846():
43      def g1845(x_1340):
44        return x_1340
45      return g1845
46    h_1339 = g1846()
47    z_1338 = 42
48    def g1844():
49      return (g_1335[1])
50    return [g1844(),h_1339(z_1338)]
51
52
53def g1864():
54    """
55    >>> g1864()
56    True
57    """
58    t_1342 = True
59    f_1341 = False
60    def g1863():
61      return [t_1342,f_1341]
62    bools_1345 = g1863()
63    def g1862():
64      def g1861(x_1343):
65        if ((not x_1343)):
66          return f_1341
67        else:
68          return t_1342
69      return g1861
70    id_1344 = g1862()
71    def g1860():
72      def g1857(x_1349):
73        def g1859():
74          return x_1349 == 0
75        if (g1859()):
76          def g1858():
77            return (bools_1345[0])
78          return id_1344(g1858())
79        else:
80          return odd_1346((x_1349)-(1))
81      return g1857
82    even_1347 = g1860()
83    def g1856():
84      def g1853(y_1348):
85        def g1855():
86          return y_1348 == 0
87        if (g1855()):
88          def g1854():
89            return (bools_1345[1])
90          return id_1344(g1854())
91        else:
92          return even_1347((y_1348)-(1))
93      return g1853
94    odd_1346 = g1856()
95    return odd_1346(5)
96
97
98def g1872():
99    """
100    >>> g1872()
101    35
102    """
103    a_1350 = 5
104    def g1871():
105      return [a_1350,6]
106    b_1351 = g1871()
107    def g1870():
108      def g1869(x_1352):
109        return (x_1352)*(a_1350)
110      return g1869
111    f_1353 = g1870()
112    def g1867():
113      def g1866():
114        return (b_1351[0])
115      return (f_1353(a_1350))-(g1866())
116    if (g1867()):
117      def g1868():
118        if ((not a_1350)):
119          return (2)*(a_1350)
120        else:
121          return (2)+(a_1350)
122      b_1351[0] = g1868()
123      f_1353(a_1350)
124    else:
125      if ((not (not (f_1353(a_1350) < b_1351)))): (f_1353(a_1350))
126    def g1865():
127      return (b_1351[0])
128    return f_1353(g1865())
129
130
131def g1885():
132    """
133    >>> g1885()
134    9
135    """
136    def g1884():
137      def g1883(x_1368, y_1367):
138        if ((not x_1368)):
139          return g_1355((x_1368+1), (y_1367+1))
140        else:
141          return h_1354((x_1368)+(y_1367))
142      return g1883
143    f_1356 = g1884()
144    def g1882():
145      def g1875(u_1359, v_1358):
146        a_1361 = (u_1359)+(v_1358)
147        b_1360 = (u_1359)*(v_1358)
148        def g1881():
149          def g1876(d_1363):
150            def g1880():
151              return [a_1361,b_1360]
152            p_1365 = g1880()
153            def g1879():
154              def g1877(m_1366):
155                if ((m_1366 < u_1359)):
156                  return f_1356(m_1366, d_1363)
157                else:
158                  def g1878():
159                    return (p_1365[0])
160                  return h_1354(g1878())
161              return g1877
162            q_1364 = g1879()
163            return q_1364(f_1356(a_1361, b_1360))
164          return g1876
165        e_1362 = g1881()
166        return e_1362(u_1359)
167      return g1875
168    g_1355 = g1882()
169    def g1874():
170      def g1873(w_1357):
171        return w_1357
172      return g1873
173    h_1354 = g1874()
174    return f_1356(4, 5)
175
176
177def g1897():
178    """
179    >>> g1897()
180    22
181    """
182    def g1896():
183      def g1890(x_1373):
184        def g1895():
185          def g1894():
186            def g1893():
187              def g1891(y_1374):
188                def g1892(z_1375):
189                  return (y_1374)+(z_1375)
190                return g1892
191              return g1891
192            return g1893()(6)
193          return g1894()(7)
194        return (x_1373)+(g1895())
195      return g1890
196    f_1370 = g1896()
197    def g1889():
198      def g1888():
199        def g1887():
200          def g1886(w_1372, u_1371):
201            return (w_1372)+(u_1371)
202          return g1886
203        return g1887()(8, 9)
204      return (5)+(g1888())
205    g_1369 = g1889()
206    return g_1369
207
208
209def g1923():
210    """
211    >>> g1923()
212    True
213    """
214    y_1377 = []
215    z_1376 = 10
216    def g1911():
217      return [5,y_1377]
218    test_ls_1378 = g1911()
219    def g1922():
220      def g1913(f_1379):
221        def g1921():
222          def g1918(g_1382):
223            def g1920():
224              def g1919(x_1383):
225                return g_1382(g_1382)(x_1383)
226              return g1919
227            return f_1379(g1920())
228          return g1918
229        def g1917():
230          def g1914(g_1380):
231            def g1916():
232              def g1915(x_1381):
233                return g_1380(g_1380)(x_1381)
234              return g1915
235            return f_1379(g1916())
236          return g1914
237        return g1921()(g1917())
238      return g1913
239    y_1377 = g1922()
240    def g1912():
241      return [z_1376,test_ls_1378]
242    test_ls_1378 = g1912()
243    def g1910():
244      def g1906(ls_1385):
245        def g1909():
246          return (ls_1385 == [])
247        if (g1909()):
248          return 0
249        else:
250          def g1908():
251            def g1907():
252              return (ls_1385[1])
253            return length_1384(g1907())
254          return (1)+(g1908())
255      return g1906
256    length_1384 = g1910()
257    len_1386 = length_1384(test_ls_1378)
258    def g1905():
259      def g1904():
260        def g1903():
261          def g1898(len_1387):
262            def g1899(ls_1388):
263              def g1902():
264                return (ls_1388 == [])
265              if (g1902()):
266                return 0
267              else:
268                def g1901():
269                  def g1900():
270                    return (ls_1388[1])
271                  return len_1387(g1900())
272                return (1)+(g1901())
273            return g1899
274          return g1898
275        return y_1377(g1903())
276      length_1384 = g1904()
277      return length_1384(test_ls_1378)
278    return (g1905() == len_1386)
279
280
281def g1927():
282    """
283    >>> g1927()
284    0
285    """
286    def g1926():
287      def g1924():
288        def g1925():
289          return loop_1389()
290        return g1925
291      return g1924
292    loop_1389 = g1926()
293    loop_1389()
294    return 0
295
296
297def g1935():
298    """
299    >>> g1935()
300    668
301    """
302    def g1934():
303      def g1928():
304        def g1933():
305          def g1931(link_1392):
306            def g1932():
307              return link_1392()
308            return g1932
309          return g1931
310        loop_1391 = g1933()
311        def g1930():
312          def g1929():
313            return 668
314          return g1929
315        return loop_1391(g1930())
316      return g1928
317    f_1390 = g1934()
318    return f_1390()()
319
320
321def g1946():
322    """
323    >>> g1946()
324    14629
325    """
326    def g1945():
327      def g1944():
328        return 1
329      return g1944
330    if (g1945()):
331      a_1393 = 2
332      def g1943():
333        def g1942():
334          def g1941():
335            def g1938(x_1394):
336              def g1940():
337                def g1939():
338                  a_1393 = 1
339                a_1393 = g1939()
340              x_1395 = g1940()
341              return x_1395
342            return g1938
343          return g1941()(1)
344        if (g1942()):
345          def g1937():
346            def g1936():
347              return None
348            return (a_1393 == g1936())
349          if (g1937()):
350            return True
351          else:
352            return False
353        else:
354          return False
355      if (g1943()):
356        return 778477
357      else:
358        return 14629
359
360
361def g1949():
362    """
363    >>> g1949()
364    2
365    """
366    def g1948():
367      def g1947(x_1396):
368        return x_1396
369      return g1947
370    f_1397 = g1948()
371    a_1398 = 1
372    return ((f_1397(a_1398))+(a_1398))*(a_1398)
373
374
375def g1952():
376    """
377    >>> g1952()
378    17
379    """
380    def g1951():
381      def g1950(x_1400, y_1399):
382        return x_1400
383      return g1950
384    k_1401 = g1951()
385    b_1402 = 17
386    return k_1401(k_1401(k_1401, 37), 37)(b_1402, (b_1402)*(b_1402))
387
388
389def g1956():
390    """
391    >>> g1956()
392    False
393    """
394    def g1955():
395      def g1953():
396        n_1403 = 256
397        def g1954():
398          return ([0]*n_1403)
399        v_1404 = g1954()
400        v_1404[32] = n_1403
401        return v_1404[32]
402      return g1953
403    f_1405 = g1955()
404    return isinstance(f_1405(), list)
405
406
407def g1959():
408    """
409    >>> g1959()
410    60
411    """
412    w_1409 = 4
413    x_1408 = 8
414    y_1407 = 16
415    z_1406 = 32
416    def g1958():
417      def g1957():
418        return (w_1409)+((x_1408)+((y_1407)+(z_1406)))
419      return g1957
420    f_1410 = g1958()
421    return f_1410()
422
423
424def g1965():
425    """
426    >>> g1965()
427    37
428    """
429    def g1964():
430      def g1962(g_1412, u_1411):
431        def g1963():
432          if (u_1411):
433            return g_1412(37)
434          else:
435            return u_1411
436        return g_1412(g1963())
437      return g1962
438    f_1413 = g1964()
439    def g1961():
440      def g1960(x_1414):
441        return x_1414
442      return g1960
443    return f_1413(g1961(), 75)
444
445
446def g1971():
447    """
448    >>> g1971()
449    4687
450    """
451    def g1970():
452      def g1968(h_1416, u_1415):
453        def g1969():
454          if (u_1415):
455            return h_1416((u_1415)+(37))
456          else:
457            return u_1415
458        return h_1416(g1969())
459      return g1968
460    f_1418 = g1970()
461    w_1417 = 62
462    def g1967():
463      def g1966(x_1419):
464        return (w_1417)-(x_1419)
465      return g1966
466    return f_1418(g1967(), (75)*(w_1417))
467
468
469def g1983():
470    """
471    >>> g1983()
472    True
473    """
474    t_1421 = True
475    f_1420 = False
476    def g1982():
477      return [t_1421,f_1420]
478    bools_1424 = g1982()
479    def g1981():
480      def g1980(x_1422):
481        if ((not x_1422)):
482          return f_1420
483        else:
484          return t_1421
485      return g1980
486    id_1423 = g1981()
487    def g1979():
488      def g1976(x_1428):
489        def g1978():
490          def g1977():
491            return x_1428 == 0
492          return id_1423(g1977())
493        if (g1978()):
494          return (bools_1424[0])
495        else:
496          return odd_1425((x_1428)-(1))
497      return g1976
498    even_1426 = g1979()
499    def g1975():
500      def g1972(y_1427):
501        def g1974():
502          return y_1427 == 0
503        if (g1974()):
504          def g1973():
505            return (bools_1424[1])
506          return id_1423(g1973())
507        else:
508          return even_1426((y_1427)-(1))
509      return g1972
510    odd_1425 = g1975()
511    return odd_1425(5)
512
513
514def g1990():
515    """
516    >>> g1990()
517    48
518    """
519    def g1989():
520      def g1984(x_1431, y_1430, z_1429):
521        def g1988():
522          def g1987(u_1435, v_1434):
523            x_1431 = u_1435
524            return (x_1431)+(v_1434)
525          return g1987
526        f_1437 = g1988()
527        def g1986():
528          def g1985(r_1433, s_1432):
529            y_1430 = (z_1429)+(s_1432)
530            return y_1430
531          return g1985
532        g_1436 = g1986()
533        return (f_1437(1, 2))*(g_1436(3, 4))
534      return g1984
535    return g1989()(10, 11, 12)
536
537
538def g1997():
539    """
540    >>> g1997()
541    176
542    """
543    def g1996():
544      def g1991(x_1440, y_1439, z_1438):
545        f_1444 = False
546        def g1995():
547          def g1994(r_1442, s_1441):
548            y_1439 = (z_1438)+(s_1441)
549            return y_1439
550          return g1994
551        g_1443 = g1995()
552        def g1993():
553          def g1992(u_1446, v_1445):
554            v_1445 = u_1446
555            return (x_1440)+(v_1445)
556          return g1992
557        f_1444 = g1993()
558        return (f_1444(1, 2))*(g_1443(3, 4))
559      return g1991
560    return g1996()(10, 11, 12)
561
562
563def g2002():
564    """
565    >>> g2002()
566    5
567    """
568    def g2001():
569      def g2000(x_1450):
570        return (x_1450)+(1)
571      return g2000
572    f_1448 = g2001()
573    def g1999():
574      def g1998(y_1449):
575        return f_1448(f_1448(y_1449))
576      return g1998
577    g_1447 = g1999()
578    return (f_1448(1))+(g_1447(1))
579
580
581def g2010():
582    """
583    >>> g2010()
584    1521
585    """
586    y_1451 = 3
587    def g2009():
588      def g2007(x_1457):
589        def g2008():
590          return x_1457 == 0
591        if (g2008()):
592          return g_1453((x_1457)+(1))
593        else:
594          return f_1454((x_1457)-(y_1451))
595      return g2007
596    f_1454 = g2009()
597    def g2006():
598      def g2005(x_1456):
599        return h_1452((x_1456)*(x_1456))
600      return g2005
601    g_1453 = g2006()
602    def g2004():
603      def g2003(x_1455):
604        return x_1455
605      return g2003
606    h_1452 = g2004()
607    return g_1453(39)
608
609
610def g2017():
611    """
612    >>> g2017()
613    -1
614    """
615    def g2014():
616      def g2013(x_1461):
617        return (x_1461)+(1)
618      return g2013
619    f_1459 = g2014()
620    def g2012():
621      def g2011(y_1460):
622        return f_1459(f_1459(y_1460))
623      return g2011
624    g_1458 = g2012()
625    def g2016():
626      def g2015(x_1462):
627        return (x_1462)-(1)
628      return g2015
629    f_1459 = g2016()
630    return (f_1459(1))+(g_1458(1))
631
632
633def g2032():
634    """
635    >>> g2032()
636    [52, [17, [35, [17, 35]]]]
637    """
638    def g2031():
639      def g2030():
640        return (a_1465)+(b_1464)
641      return g2030
642    f_1466 = g2031()
643    a_1465 = 17
644    b_1464 = 35
645    def g2029():
646      def g2028():
647        def g2027():
648          return a_1465
649        return g2027
650      def g2026():
651        def g2025():
652          return b_1464
653        return g2025
654      return [g2028(),g2026()]
655    h_1463 = g2029()
656    def g2024():
657      def g2023():
658        def g2022():
659          def g2021():
660            def g2020():
661              return (h_1463[0])
662            return g2020()()
663          def g2019():
664            def g2018():
665              return (h_1463[1])
666            return g2018()()
667          return [g2021(),g2019()]
668        return [b_1464,g2022()]
669      return [a_1465,g2023()]
670    return [f_1466(),g2024()]
671
672
673def g2038():
674    """
675    >>> g2038()
676    120
677    """
678    x_1469 = 5
679    def g2037():
680      a_1467 = 1
681      def g2036():
682        return a_1467
683      return g2036
684    th_1468 = g2037()
685    def g2035():
686      def g2033(n_1472, th_1471):
687        def g2034():
688          return n_1472 == 0
689        if (g2034()):
690          return th_1471()
691        else:
692          return (n_1472)*(fact_1470((n_1472)-(1), th_1471))
693      return g2033
694    fact_1470 = g2035()
695    return fact_1470(x_1469, th_1468)
696
697
698def g2046():
699    """
700    >>> g2046()
701    [120, -120]
702    """
703    def g2045():
704      def g2044(n_1473):
705        return (n_1473 < 0)
706      return g2044
707    negative_1474 = g2045()
708    def g2043():
709      def g2041(n_1478):
710        def g2042():
711          return n_1478 == 0
712        if (g2042()):
713          return 1
714        else:
715          return (n_1478)*(fact_1476((n_1478)-(1)))
716      return g2041
717    fact_1476 = g2043()
718    def g2040():
719      def g2039(n_1477):
720        if ((not negative_1474(n_1477))):
721          return fact_1476(n_1477)
722        else:
723          return (0)-(fact_1476((0)-(n_1477)))
724      return g2039
725    call_fact_1475 = g2040()
726    return [call_fact_1475(5),call_fact_1475(-5)]
727
728
729def g2050():
730    """
731    >>> g2050()
732    [0, 1, 2, 3]
733    """
734    def g2049():
735      def g2048(v_1482, i_1481, n_1480):
736        if ((not (i_1481 == n_1480))):
737          v_1482[i_1481] = i_1481
738          return iota_fill_1479(v_1482, (i_1481)+(1), n_1480)
739      return g2048
740    iota_fill_1479 = g2049()
741    n_1483 = 4
742    def g2047():
743      return ([0]*n_1483)
744    v_1484 = g2047()
745    iota_fill_1479(v_1484, 0, n_1483)
746    return v_1484
747
748
749def g2061():
750    """
751    >>> g2061()
752    [[33, 55], [77, 99]]
753    """
754    def g2060():
755      def g2059():
756        def g2058():
757          def g2057():
758            def g2051(a_1485):
759              def g2052(b_1486):
760                def g2053(c_1487):
761                  def g2054(d_1488):
762                    def g2056():
763                      return [a_1485,b_1486]
764                    def g2055():
765                      return [c_1487,d_1488]
766                    return [g2056(),g2055()]
767                  return g2054
768                return g2053
769              return g2052
770            return g2051
771          return g2057()(33)
772        return g2058()(55)
773      return g2059()(77)
774    return g2060()(99)
775
776
777def g2075():
778    """
779    >>> g2075()
780    [[[3, [21, [18, []]]], [4, [28, [24, []]]]], [[[0, [0, [0, []]]], [1, [7, [6, []]]]], [[408, 408], []]]]
781    """
782    a_1489 = 17
783    def g2074():
784      def g2064(x_1490):
785        x1_1492 = (x_1490)+(1)
786        x2_1491 = (x_1490)+(2)
787        y1_1494 = (x1_1492)*(7)
788        y2_1493 = (x2_1491)*(7)
789        z1_1496 = (y1_1494)-(x1_1492)
790        z2_1495 = (y2_1493)-(x2_1491)
791        w1_1498 = (z1_1496)*(a_1489)
792        w2_1497 = (z2_1495)*(a_1489)
793        def g2073():
794          def g2068(b_1500):
795            if ((b_1500 == a_1489)):
796              def g2072():
797                def g2071():
798                  return [z1_1496,[]]
799                return [y1_1494,g2071()]
800              return [x1_1492,g2072()]
801            else:
802              def g2070():
803                def g2069():
804                  return [z2_1495,[]]
805                return [y2_1493,g2069()]
806              return [x2_1491,g2070()]
807          return g2068
808        g_1502 = g2073()
809        def g2067():
810          def g2066(c_1499):
811            if ((c_1499 == x_1490)):
812              return w1_1498
813            else:
814              return w2_1497
815          return g2066
816        h_1501 = g2067()
817        def g2065():
818          if (((x_1490)*(x_1490) == (x_1490)+(x_1490))):
819            return True
820          else:
821            return (x_1490 < 0)
822        if (g2065()):
823          return [g_1502(17),g_1502(16)]
824        else:
825          return [h_1501(x_1490),h_1501((x_1490)-(0))]
826      return g2064
827    f_1503 = g2074()
828    def g2063():
829      def g2062():
830        return [f_1503(3),[]]
831      return [f_1503(-1),g2062()]
832    return [f_1503(2),g2063()]
833
834