2014-10-09 12:41:36 +00:00
|
|
|
// 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.
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
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),
|
2014-10-09 12:41:36 +00:00
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
|
|
var set;
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
function SetSetupSmiBase() {
|
|
|
|
SetupSmiKeys();
|
2014-10-09 12:41:36 +00:00
|
|
|
set = new Set;
|
2014-10-29 10:18:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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() {
|
2014-10-09 12:41:36 +00:00
|
|
|
for (var i = 0; i < N; i++) {
|
2014-10-29 10:18:16 +00:00
|
|
|
set.add(keys[i], i);
|
2014-10-09 12:41:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
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();
|
|
|
|
}
|
|
|
|
}
|
2014-10-09 12:41:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
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);
|
|
|
|
}
|
2014-10-09 12:41:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
function SetHasObject() {
|
2014-10-09 12:41:36 +00:00
|
|
|
for (var i = 0; i < N; i++) {
|
2014-10-29 10:18:16 +00:00
|
|
|
if (!set.has(keys[i])) {
|
2014-10-09 12:41:36 +00:00
|
|
|
throw new Error();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (var i = N; i < 2 * N; i++) {
|
2014-10-29 10:18:16 +00:00
|
|
|
if (set.has(keys[i])) {
|
2014-10-09 12:41:36 +00:00
|
|
|
throw new Error();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
function SetDeleteObject() {
|
2014-10-09 12:41:36 +00:00
|
|
|
// 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++) {
|
2014-10-29 10:18:16 +00:00
|
|
|
set.delete(keys[i]);
|
2014-10-09 12:41:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function SetForEach() {
|
|
|
|
set.forEach(function(v, k) {
|
|
|
|
if (v !== k) {
|
|
|
|
throw new Error();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|