map-has-nongcthing.js (2046B)
1 // Return a new map, possibly filling some dummy entries to enforce creating 2 // multiple hash buckets. 3 function createMap(values, n) { 4 var xs = [...values]; 5 for (var i = 0; i < n; ++i) { 6 xs.push({}); 7 } 8 return new Map(xs.map((x, i) => [x, i])); 9 } 10 11 function runTest(fn) { 12 fn(0); 13 fn(100); 14 } 15 16 function testInt32(n) { 17 var xs = [1, 2]; 18 var ys = [3, 4]; 19 var zs = [...xs, ...ys]; 20 var map = createMap(xs, n); 21 22 var N = 100; 23 var c = 0; 24 for (var i = 0; i < N; ++i) { 25 var z = zs[i & 3]; 26 if (map.has(z)) c++; 27 } 28 assertEq(c, N / 2); 29 } 30 runTest(testInt32); 31 32 function testDouble(n) { 33 var xs = [Math.PI, Infinity]; 34 var ys = [Math.E, -Infinity]; 35 var zs = [...xs, ...ys]; 36 var map = createMap(xs, n); 37 38 var N = 100; 39 var c = 0; 40 for (var i = 0; i < N; ++i) { 41 var z = zs[i & 3]; 42 if (map.has(z)) c++; 43 } 44 assertEq(c, N / 2); 45 } 46 runTest(testDouble); 47 48 function testZero(n) { 49 var xs = [0, -0]; 50 var ys = [1, -1]; 51 var zs = [...xs, ...ys]; 52 var map = createMap([0], n); 53 54 var N = 100; 55 var c = 0; 56 for (var i = 0; i < N; ++i) { 57 var z = zs[i & 3]; 58 if (map.has(z)) c++; 59 } 60 assertEq(c, N / 2); 61 } 62 runTest(testZero); 63 64 function testNaN(n) { 65 var xs = [NaN, -NaN]; 66 var ys = [1, -1]; 67 var zs = [...xs, ...ys]; 68 var map = createMap([NaN], n); 69 70 var N = 100; 71 var c = 0; 72 for (var i = 0; i < N; ++i) { 73 var z = zs[i & 3]; 74 if (map.has(z)) c++; 75 } 76 assertEq(c, N / 2); 77 } 78 runTest(testNaN); 79 80 function testUndefinedAndNull(n) { 81 var xs = [undefined, null]; 82 var ys = [1, -1]; 83 var zs = [...xs, ...ys]; 84 var map = createMap(xs, n); 85 86 var N = 100; 87 var c = 0; 88 for (var i = 0; i < N; ++i) { 89 var z = zs[i & 3]; 90 if (map.has(z)) c++; 91 } 92 assertEq(c, N / 2); 93 } 94 runTest(testUndefinedAndNull); 95 96 function testBoolean(n) { 97 var xs = [true, false]; 98 var ys = [1, -1]; 99 var zs = [...xs, ...ys]; 100 var map = createMap(xs, n); 101 102 var N = 100; 103 var c = 0; 104 for (var i = 0; i < N; ++i) { 105 var z = zs[i & 3]; 106 if (map.has(z)) c++; 107 } 108 assertEq(c, N / 2); 109 } 110 runTest(testBoolean);