5b85911e5e
The big change here is to split out each key type into its own benchmark suite, since optimizations for different key types are likely to be disjoint. ForEach tests have also been split into separate "Iteration" suites, again with the thought that iteration performance is likely separable from key type. As part of adding the new tests, rejiggered the existing tests: - Map.set and Set.add (along with their Weak variants) no longer include construction costs in their scores - Moved key logic into the shared common.js R=arv@chromium.org, machenbach@chromium.org Review URL: https://codereview.chromium.org/685753004 Cr-Commit-Position: refs/heads/master@{#24969} git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24969 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
173 lines
3.5 KiB
JavaScript
173 lines
3.5 KiB
JavaScript
// Copyright 2014 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
|
|
var SetSmiBenchmark = new BenchmarkSuite('Set-Smi', [1000], [
|
|
new Benchmark('Set', false, false, 0, SetAddSmi, SetSetupSmiBase, SetTearDown),
|
|
new Benchmark('Has', false, false, 0, SetHasSmi, SetSetupSmi, SetTearDown),
|
|
new Benchmark('Delete', false, false, 0, SetDeleteSmi, SetSetupSmi, SetTearDown),
|
|
]);
|
|
|
|
|
|
var SetStringBenchmark = new BenchmarkSuite('Set-String', [1000], [
|
|
new Benchmark('Set', false, false, 0, SetAddString, SetSetupStringBase, SetTearDown),
|
|
new Benchmark('Has', false, false, 0, SetHasString, SetSetupString, SetTearDown),
|
|
new Benchmark('Delete', false, false, 0, SetDeleteString, SetSetupString, SetTearDown),
|
|
]);
|
|
|
|
|
|
var SetObjectBenchmark = new BenchmarkSuite('Set-Object', [1000], [
|
|
new Benchmark('Set', false, false, 0, SetAddObject, SetSetupObjectBase, SetTearDown),
|
|
new Benchmark('Has', false, false, 0, SetHasObject, SetSetupObject, SetTearDown),
|
|
new Benchmark('Delete', false, false, 0, SetDeleteObject, SetSetupObject, SetTearDown),
|
|
]);
|
|
|
|
|
|
var SetIterationBenchmark = new BenchmarkSuite('Set-Iteration', [1000], [
|
|
new Benchmark('ForEach', false, false, 0, SetForEach, SetSetupSmi, SetTearDown),
|
|
]);
|
|
|
|
|
|
var set;
|
|
|
|
|
|
function SetSetupSmiBase() {
|
|
SetupSmiKeys();
|
|
set = new Set;
|
|
}
|
|
|
|
|
|
function SetSetupSmi() {
|
|
SetSetupSmiBase();
|
|
SetAddSmi();
|
|
}
|
|
|
|
|
|
function SetSetupStringBase() {
|
|
SetupStringKeys();
|
|
set = new Set;
|
|
}
|
|
|
|
|
|
function SetSetupString() {
|
|
SetSetupStringBase();
|
|
SetAddString();
|
|
}
|
|
|
|
|
|
function SetSetupObjectBase() {
|
|
SetupObjectKeys();
|
|
set = new Set;
|
|
}
|
|
|
|
|
|
function SetSetupObject() {
|
|
SetSetupObjectBase();
|
|
SetAddObject();
|
|
}
|
|
|
|
|
|
function SetTearDown() {
|
|
set = null;
|
|
}
|
|
|
|
|
|
function SetAddSmi() {
|
|
for (var i = 0; i < N; i++) {
|
|
set.add(keys[i], i);
|
|
}
|
|
}
|
|
|
|
|
|
function SetHasSmi() {
|
|
for (var i = 0; i < N; i++) {
|
|
if (!set.has(keys[i])) {
|
|
throw new Error();
|
|
}
|
|
}
|
|
for (var i = N; i < 2 * N; i++) {
|
|
if (set.has(keys[i])) {
|
|
throw new Error();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function SetDeleteSmi() {
|
|
// 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++) {
|
|
set.delete(keys[i]);
|
|
}
|
|
}
|
|
|
|
|
|
function SetAddString() {
|
|
for (var i = 0; i < N; i++) {
|
|
set.add(keys[i], i);
|
|
}
|
|
}
|
|
|
|
|
|
function SetHasString() {
|
|
for (var i = 0; i < N; i++) {
|
|
if (!set.has(keys[i])) {
|
|
throw new Error();
|
|
}
|
|
}
|
|
for (var i = N; i < 2 * N; i++) {
|
|
if (set.has(keys[i])) {
|
|
throw new Error();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function SetDeleteString() {
|
|
// 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++) {
|
|
set.delete(keys[i]);
|
|
}
|
|
}
|
|
|
|
|
|
function SetAddObject() {
|
|
for (var i = 0; i < N; i++) {
|
|
set.add(keys[i], i);
|
|
}
|
|
}
|
|
|
|
|
|
function SetHasObject() {
|
|
for (var i = 0; i < N; i++) {
|
|
if (!set.has(keys[i])) {
|
|
throw new Error();
|
|
}
|
|
}
|
|
for (var i = N; i < 2 * N; i++) {
|
|
if (set.has(keys[i])) {
|
|
throw new Error();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function SetDeleteObject() {
|
|
// 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++) {
|
|
set.delete(keys[i]);
|
|
}
|
|
}
|
|
|
|
|
|
function SetForEach() {
|
|
set.forEach(function(v, k) {
|
|
if (v !== k) {
|
|
throw new Error();
|
|
}
|
|
});
|
|
}
|