summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/collections/Map-iterator-remove-1.js
blob: c869edfcf92dd2b33b8b24783dbdac946b4a6e7b (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
// A map iterator can cope with removing the current entry.

function test(pairs) {
    print(uneval(pairs));
    var map = new Map(pairs);
    
    var all_keys = '';
    var false_keys = '';
    for (let [k, v] of map) {
        all_keys += k;
        if (!v)
            false_keys += k;
    }

    var log = '';
    for (let [k, remove] of map) {
        log += k;
        if (remove)
            map.delete(k);
    }
    assertEq(log, all_keys);

    var remaining_keys = [...map].map(([k]) => k).join('');
    assertEq(remaining_keys, false_keys);
}

// removing the only entry
test([['a', true]]);

// removing the first entry
test([['a', true], ['b', false], ['c', false]]);

// removing a middle entry
test([['a', false], ['b', true], ['c', false]]);

// removing the last entry
test([['a', false], ['b', false], ['c', true]]);

// removing all entries
test([['a', true], ['b', true], ['c', true]]);