summaryrefslogtreecommitdiff
path: root/tests/run/lambda_T195.pyx
blob: bfae08fea94dd9d6f9c1832b646730968bb625d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# mode: run
# tag: lambda
# ticket: t195

__doc__ = u"""
#>>> py_identity = lambda x:x
#>>> py_identity(1) == cy_identity(1)
#True
"""

#cy_identity = lambda x:x


def make_identity():
    """
    >>> idcall = make_identity()
    >>> idcall(1)
    1
    >>> idcall(2)
    2
    """
    return lambda x:x

def make_const0(x):
    """
    >>> make_const0(1)()
    1
    """
    return lambda :x

def make_const1(x):
    """
    >>> make_const1(1)(2)
    1
    >>> make_const1(1)(2)
    1
    """
    return lambda _:x


def make_const_calc0():
    """
    >>> make_const_calc0()()
    11
    """
    return lambda : 1*2*3+5

def make_const_calc1():
    """
    >>> make_const_calc1()(2)
    11
    """
    return lambda _: 1*2*3+5

def make_const_calc1_xy(x):
    """
    >>> make_const_calc1_xy(8)(2)
    27
    """
    return lambda y: x*y+(1*2*3+5)

def make_lambda_lambda(x):
    """
    >>> make_lambda_lambda(1)(2)(4)
    7
    """
    return lambda y : \
           lambda z:x+y+z

def make_typed_lambda_lambda(int x):
    """
    >>> make_typed_lambda_lambda(1)(2)(4)
    7

    >>> partial_lambda = make_typed_lambda_lambda(1)(2)
    >>> partial_lambda(4)
    7
    >>> partial_lambda(5)
    8
    """
    return lambda int y : \
           lambda int z:x+y+z

def pass_lambda(f):
    """
    >>> def f(a, lfunc): return lfunc(a,2)
    >>> pass_lambda(f)
    12
    """
    return f(1, lambda a, b : a*10+b)

def pass_lambda_with_args(f):
    """
    >>> def f(a, lfunc): return lfunc(a,2,3)
    >>> pass_lambda_with_args(f)
    123
    """
    return f(1, lambda a, *args : (a*10 + args[0])*10 + args[1])

def pass_lambda_with_args_kwargs(f):
    """
    >>> def f(a, lfunc): return lfunc(a,2,3, b=4)
    >>> pass_lambda_with_args_kwargs(f)
    1234
    """
    return f(1, lambda a, *args, **kwargs : ((a*10 + args[0])*10 + args[1])*10 + kwargs['b'])

def pass_lambda_with_args_kwargs_kwonly_args(f):
    """
    >>> def f(a, lfunc): return lfunc(a,2,3, b=4, c=5)
    >>> pass_lambda_with_args_kwargs_kwonly_args(f)
    12345
    """
    return f(1, lambda a, *args, b, **kwargs : (((a*10 + args[0])*10 + args[1])*10 + b)*10 + kwargs['c'])