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