js/src/tests/ecma_6/Generators/delegating-yield-9.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:11d860593ae5
1 // Test that yield* can appear in a loop, and inside yield.
2
3 function* countdown(n) {
4 while (n > 0) {
5 yield (yield* countdown(--n));
6 }
7 return 34;
8 }
9
10 function collect_results(iter) {
11 var ret = [];
12 var result;
13 do {
14 result = iter.next();
15 ret.push(result);
16 } while (!result.done);
17 return ret;
18 }
19
20 var expected = [
21 // Only 34 yielded from the "yield" and the last return make it out.
22 // Three yields in countdown(3), two in countdown(2), and one in
23 // countdown(1) (called twice).
24 {value: 34, done: false},
25 {value: 34, done: false},
26 {value: 34, done: false},
27 {value: 34, done: false},
28 {value: 34, done: false},
29 {value: 34, done: false},
30 {value: 34, done: false},
31 {value: 34, done: true}, // final
32 ];
33
34 assertDeepEq(collect_results(countdown(3)), expected);
35
36 if (typeof reportCompare == "function")
37 reportCompare(true, true);

mercurial