map-get-string.js (1770B)
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 testConstant(n) { 17 var xs = ["a", "b"]; 18 var ys = ["c", "d"]; 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(testConstant); 32 33 function testConstantFatInline(n) { 34 var xs = ["a", "b"].map(s => s.repeat(10)); 35 var ys = ["c", "d"].map(s => s.repeat(10)); 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(testConstantFatInline); 49 50 function testComputed(n) { 51 var xs = ["a", "b"]; 52 var ys = ["c", "d"]; 53 var zs = [...xs, ...ys]; 54 var map = createMap(xs, 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 z = String.fromCharCode(z.charCodeAt(0)); 61 var v = map.get(z); 62 if (v !== undefined) c += v; 63 } 64 assertEq(c, N / 2 + N / 4); 65 } 66 runTest(testComputed); 67 68 function testRope(n) { 69 var xs = ["a", "b"]; 70 var ys = ["c", "d"]; 71 var zs = [...xs, ...ys]; 72 var map = createMap(xs.map(x => x.repeat(100)), n); 73 74 var N = 100; 75 var c = 0; 76 for (var i = 0; i < N; ++i) { 77 var z = zs[i & 3].repeat(100); 78 var v = map.get(z); 79 if (v !== undefined) c += v; 80 } 81 assertEq(c, N / 2 + N / 4); 82 } 83 runTest(testRope);