Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: tests/language/for_variable_capture_test.dart

Issue 831133004: Use closure conversion in new dart2js backend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698