blob: 8b358525c41df1041221ae6b36f4fe1b61a3e671 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
// Test that each yield* loop just checks "done", and "value" is only
// fetched once at the end.
var log = "";
function collect_results(iter) {
var ret = [];
var result;
do {
result = iter.next();
ret.push(result);
} while (!result.done);
return ret;
}
function Iter(val, count) {
function next() {
log += 'n';
return {
get done() { log += "d"; return count-- == 0; },
get value() { log += "v"; return val; }
}
}
function iterator() {
log += 'i';
return this;
}
this.next = next;
this[Symbol.iterator] = iterator;
}
function* delegate(iter) { return yield* iter; }
var inner = new Iter(42, 5);
var outer = delegate(inner);
// Five values, and one terminal value.
outer.next();
outer.next();
outer.next();
outer.next();
outer.next();
outer.next();
assertEq(log, "indndndndndndv");
// Outer's dead, man. Outer's dead.
assertDeepEq(outer.next(), {value: undefined, done: true});
// No more checking the iterator.
assertEq(log, "indndndndndndv");
if (typeof reportCompare == "function")
reportCompare(true, true);
|