1
2
3
4
5
6
7
8 package main
9
10 var ok bool
11 var sink int
12
13 func main() {
14 {
15 if x := func() int {
16 return 1
17 }(); x != 1 {
18 ppanic("x != 1")
19 }
20 if x := func() int {
21 return 1
22 }; x() != 1 {
23 ppanic("x() != 1")
24 }
25 }
26
27 {
28 if y := func(x int) int {
29 return x + 2
30 }(40); y != 42 {
31 ppanic("y != 42")
32 }
33 if y := func(x int) int {
34 return x + 2
35 }; y(40) != 42 {
36 ppanic("y(40) != 42")
37 }
38 }
39
40 {
41 y := func(x int) int {
42 return x + 2
43 }
44 y = func(x int) int {
45 return x + 1
46 }
47 if y(40) != 41 {
48 ppanic("y(40) != 41")
49 }
50 }
51
52 {
53 func() {
54 y := func(x int) int {
55 return x + 2
56 }
57 y = func(x int) int {
58 return x + 1
59 }
60 if y(40) != 41 {
61 ppanic("y(40) != 41")
62 }
63 }()
64 }
65
66 {
67 y := func(x int) int {
68 return x + 2
69 }
70 y, sink = func(x int) int {
71 return x + 1
72 }, 42
73 if y(40) != 41 {
74 ppanic("y(40) != 41")
75 }
76 }
77
78 {
79 func() {
80 y := func(x int) int {
81 return x + 2
82 }
83 y, sink = func(x int) int {
84 return x + 1
85 }, 42
86 if y(40) != 41 {
87 ppanic("y(40) != 41")
88 }
89 }()
90 }
91
92 {
93 y := func(x int) int {
94 return x + 2
95 }
96 y, sink = func() (func(int) int, int) {
97 return func(x int) int {
98 return x + 1
99 }, 42
100 }()
101 if y(40) != 41 {
102 ppanic("y(40) != 41")
103 }
104 }
105
106 {
107 func() {
108 y := func(x int) int {
109 return x + 2
110 }
111 y, sink = func() (func(int) int, int) {
112 return func(x int) int {
113 return x + 1
114 }, 42
115 }()
116 if y(40) != 41 {
117 ppanic("y(40) != 41")
118 }
119 }()
120 }
121
122 {
123 y := func(x int) int {
124 return x + 2
125 }
126 y, ok = map[int]func(int) int{
127 0: func(x int) int { return x + 1 },
128 }[0]
129 if y(40) != 41 {
130 ppanic("y(40) != 41")
131 }
132 }
133
134 {
135 func() {
136 y := func(x int) int {
137 return x + 2
138 }
139 y, ok = map[int]func(int) int{
140 0: func(x int) int { return x + 1 },
141 }[0]
142 if y(40) != 41 {
143 ppanic("y(40) != 41")
144 }
145 }()
146 }
147
148 {
149 y := func(x int) int {
150 return x + 2
151 }
152 y, ok = interface{}(func(x int) int {
153 return x + 1
154 }).(func(int) int)
155 if y(40) != 41 {
156 ppanic("y(40) != 41")
157 }
158 }
159
160 {
161 func() {
162 y := func(x int) int {
163 return x + 2
164 }
165 y, ok = interface{}(func(x int) int {
166 return x + 1
167 }).(func(int) int)
168 if y(40) != 41 {
169 ppanic("y(40) != 41")
170 }
171 }()
172 }
173
174 {
175 x := 42
176 if y := func() int {
177 return x
178 }(); y != 42 {
179 ppanic("y != 42")
180 }
181 if y := func() int {
182 return x
183 }; y() != 42 {
184 ppanic("y() != 42")
185 }
186 }
187
188 {
189 x := 42
190 if z := func(y int) int {
191 return func() int {
192 return x + y
193 }()
194 }(1); z != 43 {
195 ppanic("z != 43")
196 }
197 if z := func(y int) int {
198 return func() int {
199 return x + y
200 }()
201 }; z(1) != 43 {
202 ppanic("z(1) != 43")
203 }
204 }
205
206 {
207 a := 1
208 func() {
209 func() {
210 a = 2
211 }()
212 }()
213 if a != 2 {
214 ppanic("a != 2")
215 }
216 }
217
218 {
219 b := 2
220 func(b int) {
221 func() {
222 b = 3
223 }()
224 if b != 3 {
225 ppanic("b != 3")
226 }
227 }(b)
228 if b != 2 {
229 ppanic("b != 2")
230 }
231 }
232
233 {
234 c := 3
235 func() {
236 c = 4
237 func() {
238 if c != 4 {
239 ppanic("c != 4")
240 }
241 recover()
242 }()
243 }()
244 if c != 4 {
245 ppanic("c != 4")
246 }
247 }
248
249 {
250 a := 2
251 if r := func(x int) int {
252 b := 3
253 return func(y int) int {
254 c := 5
255 return func(z int) int {
256 return a*x + b*y + c*z
257 }(10)
258 }(100)
259 }(1000); r != 2350 {
260 ppanic("r != 2350")
261 }
262 }
263
264 {
265 a := 2
266 if r := func(x int) int {
267 b := 3
268 return func(y int) int {
269 c := 5
270 func(z int) {
271 a = a * x
272 b = b * y
273 c = c * z
274 }(10)
275 return a + c
276 }(100) + b
277 }(1000); r != 2350 {
278 ppanic("r != 2350")
279 }
280 if a != 2000 {
281 ppanic("a != 2000")
282 }
283 }
284 }
285
286
287 func ppanic(s string) {
288 panic(s)
289 }
290
View as plain text