Index: test/js-perf-test/Collections/map.js |
diff --git a/test/js-perf-test/Collections/map.js b/test/js-perf-test/Collections/map.js |
index b310a719025ee98c201148f51100a177b8a5ca17..4f55798eb7c59fe2b15bedd8e834cc30ae0f84d7 100644 |
--- a/test/js-perf-test/Collections/map.js |
+++ b/test/js-perf-test/Collections/map.js |
@@ -3,24 +3,71 @@ |
// found in the LICENSE file. |
-var MapBenchmark = new BenchmarkSuite('Map', [1000], [ |
- new Benchmark('Set', false, false, 0, MapSet), |
- new Benchmark('Has', false, false, 0, MapHas, MapSetup, MapTearDown), |
- new Benchmark('Get', false, false, 0, MapGet, MapSetup, MapTearDown), |
- new Benchmark('Delete', false, false, 0, MapDelete, MapSetup, MapTearDown), |
- new Benchmark('ForEach', false, false, 0, MapForEach, MapSetup, MapTearDown), |
+var MapSmiBenchmark = new BenchmarkSuite('Map-Smi', [1000], [ |
+ new Benchmark('Set', false, false, 0, MapSetSmi, MapSetupSmiBase, MapTearDown), |
+ new Benchmark('Has', false, false, 0, MapHasSmi, MapSetupSmi, MapTearDown), |
+ new Benchmark('Get', false, false, 0, MapGetSmi, MapSetupSmi, MapTearDown), |
+ new Benchmark('Delete', false, false, 0, MapDeleteSmi, MapSetupSmi, MapTearDown), |
+]); |
+ |
+ |
+var MapStringBenchmark = new BenchmarkSuite('Map-String', [1000], [ |
+ new Benchmark('Set', false, false, 0, MapSetString, MapSetupStringBase, MapTearDown), |
+ new Benchmark('Has', false, false, 0, MapHasString, MapSetupString, MapTearDown), |
+ new Benchmark('Get', false, false, 0, MapGetString, MapSetupString, MapTearDown), |
+ new Benchmark('Delete', false, false, 0, MapDeleteString, MapSetupString, MapTearDown), |
+]); |
+ |
+ |
+var MapObjectBenchmark = new BenchmarkSuite('Map-Object', [1000], [ |
+ new Benchmark('Set', false, false, 0, MapSetObject, MapSetupObjectBase, MapTearDown), |
+ new Benchmark('Has', false, false, 0, MapHasObject, MapSetupObject, MapTearDown), |
+ new Benchmark('Get', false, false, 0, MapGetObject, MapSetupObject, MapTearDown), |
+ new Benchmark('Delete', false, false, 0, MapDeleteObject, MapSetupObject, MapTearDown), |
+]); |
+ |
+ |
+var MapIterationBenchmark = new BenchmarkSuite('Map-Iteration', [1000], [ |
+ new Benchmark('ForEach', false, false, 0, MapForEach, MapSetupSmi, MapTearDown), |
]); |
var map; |
-var N = 10; |
-function MapSetup() { |
+function MapSetupSmiBase() { |
+ SetupSmiKeys(); |
+ map = new Map; |
+} |
+ |
+ |
+function MapSetupSmi() { |
+ MapSetupSmiBase(); |
+ MapSetSmi(); |
+} |
+ |
+ |
+function MapSetupStringBase() { |
+ SetupStringKeys(); |
+ map = new Map; |
+} |
+ |
+ |
+function MapSetupString() { |
+ MapSetupStringBase(); |
+ MapSetString(); |
+} |
+ |
+ |
+function MapSetupObjectBase() { |
+ SetupObjectKeys(); |
map = new Map; |
- for (var i = 0; i < N; i++) { |
- map.set(i, i); |
- } |
+} |
+ |
+ |
+function MapSetupObject() { |
+ MapSetupObjectBase(); |
+ MapSetObject(); |
} |
@@ -29,45 +76,134 @@ function MapTearDown() { |
} |
-function MapSet() { |
- MapSetup(); |
- MapTearDown(); |
+function MapSetSmi() { |
+ for (var i = 0; i < N; i++) { |
+ map.set(keys[i], i); |
+ } |
+} |
+ |
+ |
+function MapHasSmi() { |
+ for (var i = 0; i < N; i++) { |
+ if (!map.has(keys[i])) { |
+ throw new Error(); |
+ } |
+ } |
+ for (var i = N; i < 2 * N; i++) { |
+ if (map.has(keys[i])) { |
+ throw new Error(); |
+ } |
+ } |
+} |
+ |
+ |
+function MapGetSmi() { |
+ for (var i = 0; i < N; i++) { |
+ if (map.get(keys[i]) !== i) { |
+ throw new Error(); |
+ } |
+ } |
+ for (var i = N; i < 2 * N; i++) { |
+ if (map.get(keys[i]) !== undefined) { |
+ throw new Error(); |
+ } |
+ } |
+} |
+ |
+ |
+function MapDeleteSmi() { |
+ // This is run more than once per setup so we will end up deleting items |
+ // more than once. Therefore, we do not the return value of delete. |
+ for (var i = 0; i < N; i++) { |
+ map.delete(keys[i]); |
+ } |
+} |
+ |
+ |
+function MapSetString() { |
+ for (var i = 0; i < N; i++) { |
+ map.set(keys[i], i); |
+ } |
+} |
+ |
+ |
+function MapHasString() { |
+ for (var i = 0; i < N; i++) { |
+ if (!map.has(keys[i])) { |
+ throw new Error(); |
+ } |
+ } |
+ for (var i = N; i < 2 * N; i++) { |
+ if (map.has(keys[i])) { |
+ throw new Error(); |
+ } |
+ } |
+} |
+ |
+ |
+function MapGetString() { |
+ for (var i = 0; i < N; i++) { |
+ if (map.get(keys[i]) !== i) { |
+ throw new Error(); |
+ } |
+ } |
+ for (var i = N; i < 2 * N; i++) { |
+ if (map.get(keys[i]) !== undefined) { |
+ throw new Error(); |
+ } |
+ } |
+} |
+ |
+ |
+function MapDeleteString() { |
+ // This is run more than once per setup so we will end up deleting items |
+ // more than once. Therefore, we do not the return value of delete. |
+ for (var i = 0; i < N; i++) { |
+ map.delete(keys[i]); |
+ } |
+} |
+ |
+ |
+function MapSetObject() { |
+ for (var i = 0; i < N; i++) { |
+ map.set(keys[i], i); |
+ } |
} |
-function MapHas() { |
+function MapHasObject() { |
for (var i = 0; i < N; i++) { |
- if (!map.has(i)) { |
+ if (!map.has(keys[i])) { |
throw new Error(); |
} |
} |
for (var i = N; i < 2 * N; i++) { |
- if (map.has(i)) { |
+ if (map.has(keys[i])) { |
throw new Error(); |
} |
} |
} |
-function MapGet() { |
+function MapGetObject() { |
for (var i = 0; i < N; i++) { |
- if (map.get(i) !== i) { |
+ if (map.get(keys[i]) !== i) { |
throw new Error(); |
} |
} |
for (var i = N; i < 2 * N; i++) { |
- if (map.get(i) !== undefined) { |
+ if (map.get(keys[i]) !== undefined) { |
throw new Error(); |
} |
} |
} |
-function MapDelete() { |
+function MapDeleteObject() { |
// This is run more than once per setup so we will end up deleting items |
// more than once. Therefore, we do not the return value of delete. |
for (var i = 0; i < N; i++) { |
- map.delete(i); |
+ map.delete(keys[i]); |
} |
} |