1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/collections/Map-iterator-remove-1.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,40 @@ 1.4 +// A map iterator can cope with removing the current entry. 1.5 + 1.6 +function test(pairs) { 1.7 + print(uneval(pairs)); 1.8 + var map = Map(pairs); 1.9 + 1.10 + var all_keys = ''; 1.11 + var false_keys = ''; 1.12 + for (let [k, v] of map) { 1.13 + all_keys += k; 1.14 + if (!v) 1.15 + false_keys += k; 1.16 + } 1.17 + 1.18 + var log = ''; 1.19 + for (let [k, remove] of map) { 1.20 + log += k; 1.21 + if (remove) 1.22 + map.delete(k); 1.23 + } 1.24 + assertEq(log, all_keys); 1.25 + 1.26 + var remaining_keys = [k for ([k] of map)].join(''); 1.27 + assertEq(remaining_keys, false_keys); 1.28 +} 1.29 + 1.30 +// removing the only entry 1.31 +test([['a', true]]); 1.32 + 1.33 +// removing the first entry 1.34 +test([['a', true], ['b', false], ['c', false]]); 1.35 + 1.36 +// removing a middle entry 1.37 +test([['a', false], ['b', true], ['c', false]]); 1.38 + 1.39 +// removing the last entry 1.40 +test([['a', false], ['b', false], ['c', true]]); 1.41 + 1.42 +// removing all entries 1.43 +test([['a', true], ['b', true], ['c', true]]);