1# mode: run
2# tag: genexpr
3# cython: language_level=3
4
5"""
6Adapted from CPython's test_grammar.py
7"""
8
9def genexpr_simple():
10    """
11    >>> sum([ x**2 for x in range(10) ])
12    285
13    >>> sum(genexpr_simple())
14    285
15    """
16    return (x**2 for x in range(10))
17
18def genexpr_conditional():
19    """
20    >>> sum([ x*x for x in range(10) if x%2 ])
21    165
22    >>> sum(genexpr_conditional())
23    165
24    """
25    return (x*x for x in range(10) if x%2)
26
27def genexpr_nested2():
28    """
29    >>> sum([x for x in range(10)])
30    45
31    >>> sum(genexpr_nested2())
32    45
33    """
34    return (x for x in (y for y in range(10)))
35
36def genexpr_nested3():
37    """
38    >>> sum([x for x in range(10)])
39    45
40    >>> sum(genexpr_nested3())
41    45
42    """
43    return (x for x in (y for y in (z for z in range(10))))
44
45def genexpr_nested_listcomp():
46    """
47    >>> sum([x for x in range(10)])
48    45
49    >>> sum(genexpr_nested_listcomp())
50    45
51    """
52    return (x for x in [y for y in (z for z in range(10))])
53
54def genexpr_nested_conditional():
55    """
56    >>> sum([ x for x in [y for y in [z for z in range(10) if True]] if True ])
57    45
58    >>> sum(genexpr_nested_conditional())
59    45
60    """
61    return (x for x in (y for y in (z for z in range(10) if True)) if True)
62
63def genexpr_nested2_conditional_empty():
64    """
65    >>> sum(genexpr_nested2_conditional_empty())
66    0
67    """
68    return (y for y in (z for z in range(10) if True) if False)
69
70def genexpr_nested3_conditional_empty():
71    """
72    >>> sum(genexpr_nested3_conditional_empty())
73    0
74    """
75    return (x for x in (y for y in (z for z in range(10) if True) if False) if True)
76