OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 import "package:expect/expect.dart"; | |
6 | |
7 run(callback) => callback(); | |
8 | |
9 | |
10 initializer() { | |
11 var closure; | |
floitsch
2015/01/08 18:29:37
indentation (and in rest of file).
asgerf
2015/01/12 13:15:43
Done.
| |
12 for (var i=0, fn = () => i; i < 3; i++) { | |
13 i += 1; | |
14 closure = fn; | |
15 } | |
16 Expect.equals(1, closure()); | |
17 } | |
18 | |
19 condition() { | |
20 var closures = []; | |
21 check(callback) { | |
22 closures.add(callback); | |
23 return callback(); | |
24 } | |
25 var values = []; | |
26 for (var i=0; check(() => ++i) < 8; ++i) { | |
27 values.add(i); | |
28 } | |
29 Expect.listEquals([1, 3, 5, 7], values); | |
30 Expect.listEquals([2, 4, 6, 8, 10], closures.map(run).toList()); | |
31 } | |
32 | |
33 body() { | |
34 var closures = []; | |
35 for (var i=0, j=0; i<3; i++) { | |
36 j++; | |
37 closures.add(() => i); | |
38 closures.add(() => j); | |
39 } | |
40 Expect.listEquals([0, 1, 1, 2, 2, 3], closures.map(run).toList()); | |
41 } | |
42 | |
43 update() { | |
44 var closures = []; | |
45 check(callback) { | |
46 closures.add(callback); | |
47 return callback(); | |
48 } | |
49 var values = []; | |
50 for (var i=0; i < 4; check(() => ++i)) { | |
51 values.add(i); | |
52 } | |
53 Expect.listEquals([0, 1, 2, 3], values); | |
54 Expect.listEquals([2, 3, 4, 5], closures.map(run).toList()); | |
55 } | |
56 | |
57 initializer_condition() { | |
58 var values = []; | |
59 for (var i=0, fn = () => i; run(() => ++i) < 3; ) { | |
60 values.add(i); | |
61 values.add(fn()); | |
62 } | |
63 Expect.listEquals([1, 1, 2, 1], values); | |
64 } | |
65 | |
66 initializer_update() { | |
67 var update_closures = []; | |
68 update(callback) { | |
69 update_closures.add(callback); | |
70 return callback(); | |
71 } | |
72 var init_closure; | |
73 for (var i=0, fn = () => i; i < 4; update(() => ++i)) { | |
74 init_closure = fn; | |
75 if (i == 0) { | |
76 ++i; // Mutate copy of 'i' from first iteration. | |
77 } | |
78 } | |
79 Expect.equals(1, init_closure()); | |
80 Expect.listEquals([3, 4, 5], update_closures.map(run).toList()); | |
81 Expect.equals(1, init_closure()); | |
82 } | |
83 | |
84 initializer_body() { | |
85 var closures = []; | |
86 for (var i=0, fn = () => i; i < 3; i++) { | |
87 closures.add(() => i); | |
88 closures.add(fn); | |
89 fn = () => i; | |
90 } | |
91 Expect.listEquals([0, 0, 1, 0, 2, 1], closures.map(run).toList()); | |
92 } | |
93 | |
94 condition_update() { | |
95 var cond_closures = []; | |
96 check(callback) { | |
97 cond_closures.add(callback); | |
98 return callback(); | |
99 } | |
100 var update_closures = []; | |
101 update(callback) { | |
102 update_closures.add(callback); | |
103 return callback(); | |
104 } | |
105 var values = []; | |
106 for (var i=0; check(() => i) < 4; update(() => ++i)) { | |
107 values.add(i); | |
108 } | |
109 Expect.listEquals([0, 1, 2, 3], values); | |
110 Expect.listEquals([0, 1, 2, 3, 4], cond_closures.map(run).toList()); | |
111 Expect.listEquals( [2, 3, 4, 5], update_closures.map(run).toList()); | |
112 Expect.listEquals([0, 2, 3, 4, 5], cond_closures.map(run).toList()); | |
113 } | |
114 | |
115 condition_body() { | |
116 var cond_closures = []; | |
117 check(callback) { | |
118 cond_closures.add(callback); | |
119 return callback(); | |
120 } | |
121 var body_closures = []; | |
122 do_body(callback) { | |
123 body_closures.add(callback); | |
124 return callback(); | |
125 } | |
126 for (var i=0; check(() => i) < 4; ++i) { | |
127 do_body(() => i); | |
128 } | |
129 Expect.listEquals([0, 1, 2, 3, 4], cond_closures.map(run).toList()); | |
130 Expect.listEquals([0, 1, 2, 3], body_closures.map(run).toList()); | |
131 } | |
132 | |
133 initializer_condition_update() { | |
134 var init; | |
135 var cond_closures = []; | |
136 check(callback) { | |
137 cond_closures.add(callback); | |
138 return callback(); | |
139 } | |
140 var update_closures = []; | |
141 update(callback) { | |
142 update_closures.add(callback); | |
143 return callback(); | |
144 } | |
145 var values = []; | |
146 for (var i=0, fn = () => i; check(() => ++i) < 8; update(() => ++i)) { | |
147 init = fn; | |
148 values.add(i); | |
149 } | |
150 Expect.listEquals([1, 3, 5, 7], values); | |
151 Expect.equals(1, init()); | |
152 Expect.listEquals([2, 4, 6, 8, 10], cond_closures.map(run).toList()); | |
153 Expect.listEquals( [5, 7, 9, 11], update_closures.map(run).toList()); | |
154 } | |
155 | |
156 initializer_condition_body() { | |
157 var init; | |
158 var cond_closures = []; | |
159 check(callback) { | |
160 cond_closures.add(callback); | |
161 return callback(); | |
162 } | |
163 var body_closures = []; | |
164 do_body(callback) { | |
165 body_closures.add(callback); | |
166 return callback(); | |
167 } | |
168 var values = []; | |
169 for (var i=0, fn = () => i; check(() => ++i) < 8; ) { | |
170 init = fn; | |
171 do_body(() => ++i); | |
172 values.add(i); | |
173 } | |
174 Expect.listEquals([2, 4, 6, 8], values); | |
175 Expect.equals(2, init()); | |
176 Expect.listEquals([3, 5, 7, 9, 10], cond_closures.map(run).toList()); | |
177 Expect.listEquals([4, 6, 8, 10], body_closures.map(run).toList()); | |
178 } | |
179 | |
180 initializer_update_body() { | |
181 var init; | |
182 var update_closures = []; | |
183 update(callback) { | |
184 update_closures.add(callback); | |
185 return callback(); | |
186 } | |
187 var body_closures = []; | |
188 do_body(callback) { | |
189 body_closures.add(callback); | |
190 return callback(); | |
191 } | |
192 var values = []; | |
193 for (var i=0, fn = () => i; i < 8; update(() => ++i)) { | |
194 init = fn; | |
195 do_body(() => ++i); | |
196 values.add(i); | |
197 } | |
198 Expect.listEquals([1, 3, 5, 7], values); | |
199 Expect.equals(1, init()); | |
200 Expect.listEquals( [4, 6, 8, 9], update_closures.map(run).toList()); | |
201 Expect.listEquals([2, 5, 7, 9], body_closures.map(run).toList()); | |
202 } | |
203 | |
204 condition_update_body() { | |
205 var cond_closures = []; | |
206 check(callback) { | |
207 cond_closures.add(callback); | |
208 return callback(); | |
209 } | |
210 var update_closures = []; | |
211 update(callback) { | |
212 update_closures.add(callback); | |
213 return callback(); | |
214 } | |
215 var body_closures = []; | |
216 do_body(callback) { | |
217 body_closures.add(callback); | |
218 return callback(); | |
219 } | |
220 var values = []; | |
221 for (var i=0; check(() => i) < 8; update(() => ++i)) { | |
222 do_body(() => ++i); | |
223 values.add(i); | |
224 } | |
225 Expect.listEquals([1, 3, 5, 7], values); | |
226 Expect.listEquals([1, 3, 5, 7, 8], cond_closures.map(run).toList()); | |
227 Expect.listEquals( [4, 6, 8, 9], update_closures.map(run).toList()); | |
228 Expect.listEquals([2, 5, 7, 9], body_closures.map(run).toList()); | |
229 Expect.listEquals([2, 5, 7, 9, 9], cond_closures.map(run).toList()); | |
230 } | |
231 | |
232 initializer_condition_update_body() { | |
233 var init; | |
234 var cond_closures = []; | |
235 check(callback) { | |
236 cond_closures.add(callback); | |
237 return callback(); | |
238 } | |
239 var update_closures = []; | |
240 update(callback) { | |
241 update_closures.add(callback); | |
242 return callback(); | |
243 } | |
244 var body_closures = []; | |
245 do_body(callback) { | |
246 body_closures.add(callback); | |
247 return callback(); | |
248 } | |
249 var values = []; | |
250 for (var i=0, fn = () => i; check(() => i) < 8; update(() => ++i)) { | |
251 init = fn; | |
252 do_body(() => ++i); | |
253 values.add(i); | |
254 } | |
255 Expect.listEquals([1, 3, 5, 7], values); | |
256 Expect.equals(1, init()); | |
257 Expect.listEquals([1, 3, 5, 7, 8], cond_closures.map(run).toList()); | |
258 Expect.listEquals( [4, 6, 8, 9], update_closures.map(run).toList()); | |
259 Expect.listEquals([2, 5, 7, 9], body_closures.map(run).toList()); | |
260 Expect.listEquals([2, 5, 7, 9, 9], cond_closures.map(run).toList()); | |
261 } | |
262 | |
263 main() { | |
264 initializer(); | |
265 condition(); | |
266 update(); | |
267 body(); | |
268 initializer_condition(); | |
269 initializer_update(); | |
270 initializer_body(); | |
271 condition_update(); | |
272 condition_body(); | |
273 initializer_condition_update(); | |
274 initializer_condition_body(); | |
275 initializer_update_body(); | |
276 condition_update_body(); | |
277 initializer_condition_update_body(); | |
278 } | |
OLD | NEW |