1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_6/Generators/delegating-yield-8.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,44 @@ 1.4 +// Test that yield* can appear in a loop, and alongside yield. 1.5 + 1.6 +function* countdown(n) { 1.7 + while (n > 0) { 1.8 + yield n; 1.9 + yield* countdown(--n); 1.10 + } 1.11 + return 34; 1.12 +} 1.13 + 1.14 +function collect_results(iter) { 1.15 + var ret = []; 1.16 + var result; 1.17 + do { 1.18 + result = iter.next(); 1.19 + ret.push(result); 1.20 + } while (!result.done); 1.21 + return ret; 1.22 +} 1.23 + 1.24 +var expected = [ 1.25 + // yield in countdown(3), n == 3 1.26 + {value: 3, done: false}, 1.27 + // yield in yield* countdown(2), n == 2 1.28 + {value: 2, done: false}, 1.29 + // yield in nested yield* countdown(1), n == 1 1.30 + {value: 1, done: false}, 1.31 + // countdown(0) yields no values 1.32 + // second go-through of countdown(2) loop, n == 1 1.33 + {value: 1, done: false}, 1.34 + // second go-through of countdown(3) loop, n == 2 1.35 + {value: 2, done: false}, 1.36 + // yield in yield* countdown(1), n == 1 1.37 + {value: 1, done: false}, 1.38 + // third go-through of countdown(3) loop, n == 1 1.39 + {value: 1, done: false}, 1.40 + // done 1.41 + {value: 34, done: true} 1.42 +]; 1.43 + 1.44 +assertDeepEq(expected, collect_results(countdown(3))); 1.45 + 1.46 +if (typeof reportCompare == "function") 1.47 + reportCompare(true, true);