|
1 // A map iterator can cope with removing the current entry. |
|
2 |
|
3 function test(pairs) { |
|
4 print(uneval(pairs)); |
|
5 var map = Map(pairs); |
|
6 |
|
7 var all_keys = ''; |
|
8 var false_keys = ''; |
|
9 for (let [k, v] of map) { |
|
10 all_keys += k; |
|
11 if (!v) |
|
12 false_keys += k; |
|
13 } |
|
14 |
|
15 var log = ''; |
|
16 for (let [k, remove] of map) { |
|
17 log += k; |
|
18 if (remove) |
|
19 map.delete(k); |
|
20 } |
|
21 assertEq(log, all_keys); |
|
22 |
|
23 var remaining_keys = [k for ([k] of map)].join(''); |
|
24 assertEq(remaining_keys, false_keys); |
|
25 } |
|
26 |
|
27 // removing the only entry |
|
28 test([['a', true]]); |
|
29 |
|
30 // removing the first entry |
|
31 test([['a', true], ['b', false], ['c', false]]); |
|
32 |
|
33 // removing a middle entry |
|
34 test([['a', false], ['b', true], ['c', false]]); |
|
35 |
|
36 // removing the last entry |
|
37 test([['a', false], ['b', false], ['c', true]]); |
|
38 |
|
39 // removing all entries |
|
40 test([['a', true], ['b', true], ['c', true]]); |