constructor-iterable.js (1363B)
1 function testNullUndefined() { 2 for (var i = 0; i < 100; i++) { 3 var v = (i & 1) ? null : undefined; 4 5 var map = new Map(v); 6 assertEq(map.size, 0); 7 8 var set = new Set(v); 9 assertEq(set.size, 0); 10 } 11 } 12 testNullUndefined(); 13 14 function testProtoGetter() { 15 var count = 0; 16 Object.defineProperty(Array.prototype, 1, { get: () => count++ }); 17 for (var i = 0; i < 100; i++) { 18 var map = new Map([ 19 [1, 1], 20 [2, 2], 21 [3, /* hole */, 3], 22 ]); 23 assertEq(map.size, 3); 24 assertEq(map.get(3), i * 3); 25 26 var set = new Set(["a", /* hole */, "c"]); 27 assertEq(set.size, 3); 28 assertEq(set.has(i * 3 + 1), true); 29 30 new Set([1, /* hole */,]); // Side-effects! Must not be optimized away. 31 } 32 assertEq(count, 300); 33 } 34 testProtoGetter(); 35 36 // The |iterable| argument can be a primitive value. 37 function testPrimitiveIterable() { 38 Number.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator]; 39 Number.prototype.length = 2; 40 Number.prototype[0] = ["a", "b"]; 41 Number.prototype[1] = ["c", "d"]; 42 43 for (var i = 0; i < 100; i++) { 44 var map = new Map(i); 45 assertEq(map.size, 2); 46 assertEq(map.get("c"), "d"); 47 48 var set = new Set(i); 49 assertEq(set.size, 2); 50 assertEq(set.has(Number.prototype[1]), true); 51 52 var set2 = new Set("abc123abc"); 53 assertEq(set2.size, 6); 54 } 55 } 56 testPrimitiveIterable();