01f6d352c9
Change-Id: I5fc90147ee7526b8b66d04f38e5e225741cf4642 Bug: v8:6571 Reviewed-on: https://chromium-review.googlesource.com/559342 Reviewed-by: Michael Stanton <mvstanton@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#46412}
185 lines
3.7 KiB
JavaScript
185 lines
3.7 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 SetIterationBenchmark = new BenchmarkSuite('Set-Iterator', [1000], [
|
|
new Benchmark('Iterator', false, false, 0, SetIterator, 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();
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
function SetIterator() {
|
|
var result = 0;
|
|
for (const v of set) result += v;
|
|
return result;
|
|
}
|