map-get-nongcthing.js (2274B)
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 + 1])); 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 var v = map.get(z); 27 if (v !== undefined) c += v; 28 } 29 assertEq(c, N / 2 + N / 4); 30 } 31 runTest(testInt32); 32 33 function testDouble(n) { 34 var xs = [Math.PI, Infinity]; 35 var ys = [Math.E, -Infinity]; 36 var zs = [...xs, ...ys]; 37 var map = createMap(xs, n); 38 39 var N = 100; 40 var c = 0; 41 for (var i = 0; i < N; ++i) { 42 var z = zs[i & 3]; 43 var v = map.get(z); 44 if (v !== undefined) c += v; 45 } 46 assertEq(c, N / 2 + N / 4); 47 } 48 runTest(testDouble); 49 50 function testZero(n) { 51 var xs = [0, -0]; 52 var ys = [1, -1]; 53 var zs = [...xs, ...ys]; 54 var map = createMap([0], n); 55 56 var N = 100; 57 var c = 0; 58 for (var i = 0; i < N; ++i) { 59 var z = zs[i & 3]; 60 var v = map.get(z); 61 if (v !== undefined) c += v; 62 } 63 assertEq(c, N / 2); 64 } 65 runTest(testZero); 66 67 function testNaN(n) { 68 var xs = [NaN, -NaN]; 69 var ys = [1, -1]; 70 var zs = [...xs, ...ys]; 71 var map = createMap([NaN], n); 72 73 var N = 100; 74 var c = 0; 75 for (var i = 0; i < N; ++i) { 76 var z = zs[i & 3]; 77 var v = map.get(z); 78 if (v !== undefined) c += v; 79 } 80 assertEq(c, N / 2); 81 } 82 runTest(testNaN); 83 84 function testUndefinedAndNull(n) { 85 var xs = [undefined, null]; 86 var ys = [1, -1]; 87 var zs = [...xs, ...ys]; 88 var map = createMap(xs, n); 89 90 var N = 100; 91 var c = 0; 92 for (var i = 0; i < N; ++i) { 93 var z = zs[i & 3]; 94 var v = map.get(z); 95 if (v !== undefined) c += v; 96 } 97 assertEq(c, N / 2 + N / 4); 98 } 99 runTest(testUndefinedAndNull); 100 101 function testBoolean(n) { 102 var xs = [true, false]; 103 var ys = [1, -1]; 104 var zs = [...xs, ...ys]; 105 var map = createMap(xs, n); 106 107 var N = 100; 108 var c = 0; 109 for (var i = 0; i < N; ++i) { 110 var z = zs[i & 3]; 111 var v = map.get(z); 112 if (v !== undefined) c += v; 113 } 114 assertEq(c, N / 2 + N / 4); 115 } 116 runTest(testBoolean);