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

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:405f02d72be4
1 // Test that yield* can appear in a loop, and alongside yield.
2
3 function* countdown(n) {
4 while (n > 0) {
5 yield n;
6 yield* countdown(--n);
7 }
8 return 34;
9 }
10
11 function collect_results(iter) {
12 var ret = [];
13 var result;
14 do {
15 result = iter.next();
16 ret.push(result);
17 } while (!result.done);
18 return ret;
19 }
20
21 var expected = [
22 // yield in countdown(3), n == 3
23 {value: 3, done: false},
24 // yield in yield* countdown(2), n == 2
25 {value: 2, done: false},
26 // yield in nested yield* countdown(1), n == 1
27 {value: 1, done: false},
28 // countdown(0) yields no values
29 // second go-through of countdown(2) loop, n == 1
30 {value: 1, done: false},
31 // second go-through of countdown(3) loop, n == 2
32 {value: 2, done: false},
33 // yield in yield* countdown(1), n == 1
34 {value: 1, done: false},
35 // third go-through of countdown(3) loop, n == 1
36 {value: 1, done: false},
37 // done
38 {value: 34, done: true}
39 ];
40
41 assertDeepEq(expected, collect_results(countdown(3)));
42
43 if (typeof reportCompare == "function")
44 reportCompare(true, true);

mercurial