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

Side by Side Diff: test/mjsunit/ignition/generators.js

Issue 1884183002: First version of the new generators implementation. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 8 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
« src/x64/builtins-x64.cc ('K') | « src/x64/builtins-x64.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --ignition-generators --harmony-do-expressions
6
7
rmcilroy 2016/04/15 13:17:47 Great tests. Could you also add a couple of simple
neis 2016/04/18 08:04:17 Acknowledged.
8 {
9 function* foo() { }
10 let g = foo();
11 assertEquals({value: undefined, done: true}, g.next());
12 assertEquals({value: undefined, done: true}, g.next());
13 }
14
15 {
16 function* foo() { throw 666; return 42}
17 let g = foo();
18 assertThrowsEquals(() => g.next(), 666);
19 assertEquals({value: undefined, done: true}, g.next());
20 }
21
22 {
23 function* foo(a) { return a; }
24 let g = foo(42);
25 assertEquals({value: 42, done: true}, g.next());
26 assertEquals({value: undefined, done: true}, g.next());
27 }
28
29 {
30 function* foo(a) { a.iwashere = true; return a; }
31 let x = {};
32 let g = foo(x);
33 assertEquals({value: {iwashere: true}, done: true}, g.next());
34 assertEquals({value: undefined, done: true}, g.next());
35 }
36
37 {
38 let a = 42;
39 function* foo() { return a; }
40 let g = foo();
41 assertEquals({value: 42, done: true}, g.next());
42 assertEquals({value: undefined, done: true}, g.next());
43 }
44
45 {
46 let a = 40;
47 function* foo(b) { return a + b; }
48 let g = foo(2);
49 assertEquals({value: 42, done: true}, g.next());
50 assertEquals({value: undefined, done: true}, g.next());
51 }
52
53 {
54 let a = 40;
55 function* foo(b) { a--; b++; return a + b; }
56 let g = foo(2);
57 assertEquals({value: 42, done: true}, g.next());
58 assertEquals({value: undefined, done: true}, g.next());
59 }
60
61 {
62 let g;
63 function* foo() { g.next() }
64 g = foo();
65 assertThrows(() => g.next(), TypeError);
66 assertEquals({value: undefined, done: true}, g.next());
67 }
68
69 {
70 function* foo() { yield 2; yield 3; yield 4 }
71 g = foo();
72 assertEquals({value: 2, done: false}, g.next());
73 assertEquals({value: 3, done: false}, g.next());
74 assertEquals({value: 4, done: false}, g.next());
75 assertEquals({value: undefined, done: true}, g.next());
76 assertEquals({value: undefined, done: true}, g.next());
77 }
78
79 {
80 function* foo() { yield 2; if (true) { yield 3 }; yield 4 }
81 g = foo();
82 assertEquals({value: 2, done: false}, g.next());
83 assertEquals({value: 3, done: false}, g.next());
84 assertEquals({value: 4, done: false}, g.next());
85 assertEquals({value: undefined, done: true}, g.next());
86 assertEquals({value: undefined, done: true}, g.next());
87 }
88
89 {
90 function* foo() { yield 2; if (true) { yield 3; yield 4 } }
91 g = foo();
92 assertEquals({value: 2, done: false}, g.next());
93 assertEquals({value: 3, done: false}, g.next());
94 assertEquals({value: 4, done: false}, g.next());
95 assertEquals({value: undefined, done: true}, g.next());
96 assertEquals({value: undefined, done: true}, g.next());
97 }
98
99 {
100 function* foo() { yield 2; if (false) { yield 3 }; yield 4 }
101 g = foo();
102 assertEquals({value: 2, done: false}, g.next());
103 assertEquals({value: 4, done: false}, g.next());
104 assertEquals({value: undefined, done: true}, g.next());
105 assertEquals({value: undefined, done: true}, g.next());
106 }
107
108 {
109 function* foo() { yield 2; while (true) { yield 3 }; yield 4 }
110 g = foo();
111 assertEquals({value: 2, done: false}, g.next());
112 assertEquals({value: 3, done: false}, g.next());
113 assertEquals({value: 3, done: false}, g.next());
114 assertEquals({value: 3, done: false}, g.next());
115 assertEquals({value: 3, done: false}, g.next());
116 }
117
118 {
119 function* foo() { yield 2; (yield 3) + 42; yield 4 }
120 g = foo();
121 assertEquals({value: 2, done: false}, g.next());
122 assertEquals({value: 3, done: false}, g.next());
123 assertEquals({value: 4, done: false}, g.next());
124 }
125
126 {
127 function* foo() { yield 2; (do {yield 3}) + 42; yield 4 }
128 g = foo();
129 assertEquals({value: 2, done: false}, g.next());
130 assertEquals({value: 3, done: false}, g.next());
131 assertEquals({value: 4, done: false}, g.next());
132 }
133
134 {
135 function* foo() { yield 2; return (yield 3) + 42; yield 4 }
136 g = foo();
137 assertEquals({value: 2, done: false}, g.next());
138 assertEquals({value: 3, done: false}, g.next());
139 assertEquals({value: 42, done: true}, g.next(0));
140 assertEquals({value: undefined, done: true}, g.next());
141 }
142
143 {
144 let x = 42;
145 function* foo() {
146 yield x;
147 for (let x in {a: 1, b: 2}) {
148 let i = 2;
149 yield x;
150 yield i;
151 do {
152 yield i;
153 } while (i-- > 0);
154 }
155 yield x;
156 return 5;
157 }
158 g = foo();
159 assertEquals({value: 42, done: false}, g.next());
160 assertEquals({value: 'a', done: false}, g.next());
161 assertEquals({value: 2, done: false}, g.next());
162 assertEquals({value: 2, done: false}, g.next());
163 assertEquals({value: 1, done: false}, g.next());
164 assertEquals({value: 0, done: false}, g.next());
165 assertEquals({value: 'b', done: false}, g.next());
166 assertEquals({value: 2, done: false}, g.next());
167 assertEquals({value: 2, done: false}, g.next());
168 assertEquals({value: 1, done: false}, g.next());
169 assertEquals({value: 0, done: false}, g.next());
170 assertEquals({value: 42, done: false}, g.next());
171 assertEquals({value: 5, done: true}, g.next());
172 }
173
174 {
175 let a = 3;
176 function* foo() {
177 let b = 4;
178 yield 1;
179 { let c = 5; yield 2; yield a; yield b; yield c; }
180 }
181 g = foo();
182 assertEquals({value: 1, done: false}, g.next());
183 assertEquals({value: 2, done: false}, g.next());
184 assertEquals({value: 3, done: false}, g.next());
185 assertEquals({value: 4, done: false}, g.next());
186 assertEquals({value: 5, done: false}, g.next());
187 assertEquals({value: undefined, done: true}, g.next());
188 }
189
190 {
191 function* foo() {
192 yield 42;
193 yield 42;
194 yield 42;
195 yield 42;
196 yield 42;
197 yield 42;
198 yield 42;
199 yield 42;
200 yield 42;
201 yield 42;
202 yield 42;
203 yield 42;
204 yield 42;
205 yield 42;
206 yield 42;
207 yield 42;
208 yield 42;
209 yield 42;
210 yield 42;
211 yield 42;
212 yield 42;
213 yield 42;
214 yield 42;
215 yield 42;
216 yield 42;
217 yield 42;
218 yield 42;
219 yield 42;
220 yield 42;
221 yield 42;
222 yield 42;
223 yield 42;
224 yield 42;
225 yield 42;
226 yield 42;
227 yield 42;
228 yield 42;
229 yield 42;
230 yield 42;
231 yield 42;
232 yield 42;
233 yield 42;
234 yield 42;
235 yield 42;
236 yield 42;
237 yield 42;
238 yield 42;
239 yield 42;
240 yield 42;
241 yield 42;
242 yield 42;
243 yield 42;
244 yield 42;
245 yield 42;
246 yield 42;
247 yield 42;
248 yield 42;
249 yield 42;
250 yield 42;
251 yield 42;
252 yield 42;
253 yield 42;
254 yield 42;
255 yield 42;
256 yield 42;
257 yield 42;
258 yield 42;
259 yield 42;
260 yield 42;
261 yield 42;
262 yield 42;
263 yield 42;
264 yield 42;
265 yield 42;
266 yield 42;
267 yield 42;
268 yield 42;
269 yield 42;
270 yield 42;
271 yield 42;
272 yield 42;
273 yield 42;
274 yield 42;
275 yield 42;
276 yield 42;
277 yield 42;
278 yield 42;
279 yield 42;
280 yield 42;
281 yield 42;
282 yield 42;
283 yield 42;
284 yield 42;
285 yield 42;
286 yield 42;
287 yield 42;
288 yield 42;
289 yield 42;
290 yield 42;
291 yield 42;
292 }
293 g = foo();
294 for (let i = 0; i < 100; ++i) {
295 assertEquals({value: 42, done: false}, g.next());
296 }
297 assertEquals({value: undefined, done: true}, g.next());
298 }
299
300
301
302 // The rest is copied 1:1 from harmony/generators.js.
Michael Starzinger 2016/04/15 14:13:47 suggestion: Instead of duplicating these tests her
neis 2016/04/18 08:04:17 Fine with me. I removed the implication between -
303
304
5 305
6 { // yield in try-catch 306 { // yield in try-catch
7 307
8 let g = function*() { 308 let g = function*() {
9 try {yield 1} catch (error) {assertEquals("caught", error)} 309 try {yield 1} catch (error) {assertEquals("caught", error)}
10 }; 310 };
11 311
12 assertThrowsEquals(() => g().throw("not caught"), "not caught"); 312 assertThrowsEquals(() => g().throw("not caught"), "not caught");
13 313
14 { 314 {
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 return yield* inner(); 563 return yield* inner();
264 } 564 }
265 565
266 { 566 {
267 let x = g(); 567 let x = g();
268 assertEquals({value: 1, done: false}, x.next()); 568 assertEquals({value: 1, done: false}, x.next());
269 assertEquals({value: 2, done: false}, x.next()); 569 assertEquals({value: 2, done: false}, x.next());
270 assertEquals({value: 42, done: true}, x.return(42)); 570 assertEquals({value: 42, done: true}, x.return(42));
271 } 571 }
272 } 572 }
OLDNEW
« src/x64/builtins-x64.cc ('K') | « src/x64/builtins-x64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698