Source code

Revision control

Copy as Markdown

Other Tools

// Test that yield* can appear in a loop, and inside yield.
function* countdown(n) {
while (n > 0) {
yield (yield* countdown(--n));
}
return 34;
}
function collect_results(iter) {
var ret = [];
var result;
do {
result = iter.next();
ret.push(result);
} while (!result.done);
return ret;
}
var expected = [
// Only 34 yielded from the "yield" and the last return make it out.
// Three yields in countdown(3), two in countdown(2), and one in
// countdown(1) (called twice).
{value: 34, done: false},
{value: 34, done: false},
{value: 34, done: false},
{value: 34, done: false},
{value: 34, done: false},
{value: 34, done: false},
{value: 34, done: false},
{value: 34, done: true}, // final
];
assertDeepEq(collect_results(countdown(3)), expected);
if (typeof reportCompare == "function")
reportCompare(true, true);