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),
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
2017-11-16 03:41:49 +00:00
|
|
|
var SetDoubleBenchmark = new BenchmarkSuite('Set-Double', [1000], [
|
|
|
|
new Benchmark('Set', false, false, 0, SetAddDouble, SetSetupDoubleBase, SetTearDown),
|
|
|
|
new Benchmark('Has', false, false, 0, SetHasDouble, SetSetupDouble, SetTearDown),
|
|
|
|
new Benchmark('Delete', false, false, 0, SetDeleteDouble, SetSetupDouble, SetTearDown),
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
var SetIterationBenchmark = new BenchmarkSuite('Set-Iteration', [1000], [
|
|
|
|
new Benchmark('ForEach', false, false, 0, SetForEach, SetSetupSmi, SetTearDown),
|
2014-10-09 12:41:36 +00:00
|
|
|
]);
|
|
|
|
|
|
|
|
|
2017-07-05 11:58:54 +00:00
|
|
|
var SetIterationBenchmark = new BenchmarkSuite('Set-Iterator', [1000], [
|
|
|
|
new Benchmark('Iterator', false, false, 0, SetIterator, SetSetupSmi, SetTearDown),
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
2017-11-16 03:41:49 +00:00
|
|
|
var SetConstructorBenchmark = new BenchmarkSuite('Set-Constructor', [1000], [
|
|
|
|
new Benchmark('Smi', false, false, 0, SetConstructorSmi, SetupSmiKeys, SetTearDown),
|
|
|
|
new Benchmark('String', false, false, 0, SetConstructorString, SetupStringKeys, SetTearDown),
|
|
|
|
new Benchmark('Object', false, false, 0, SetConstructorObject, SetupObjectKeys, SetTearDown),
|
|
|
|
new Benchmark('Double', false, false, 0, SetConstructorDouble, SetupDoubleKeys, 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();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-11-16 03:41:49 +00:00
|
|
|
function SetSetupDoubleBase() {
|
|
|
|
SetupDoubleKeys();
|
|
|
|
set = new Set;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function SetSetupDouble() {
|
|
|
|
SetSetupDoubleBase();
|
|
|
|
SetAddDouble();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
function SetTearDown() {
|
|
|
|
set = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-11-16 03:41:49 +00:00
|
|
|
function SetConstructorSmi() {
|
|
|
|
set = new Set(keys);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
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]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-11-16 03:41:49 +00:00
|
|
|
function SetConstructorString() {
|
|
|
|
set = new Set(keys);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
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]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-11-16 03:41:49 +00:00
|
|
|
function SetConstructorObject() {
|
|
|
|
set = new Set(keys);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-10-29 10:18:16 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-11-16 03:41:49 +00:00
|
|
|
function SetConstructorDouble() {
|
|
|
|
set = new Set(keys);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function SetAddDouble() {
|
|
|
|
for (var i = 0; i < N; i++) {
|
|
|
|
set.add(keys[i], i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function SetHasDouble() {
|
|
|
|
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 SetDeleteDouble() {
|
|
|
|
// 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]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-10-09 12:41:36 +00:00
|
|
|
function SetForEach() {
|
|
|
|
set.forEach(function(v, k) {
|
|
|
|
if (v !== k) {
|
|
|
|
throw new Error();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2017-07-05 11:58:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
function SetIterator() {
|
|
|
|
var result = 0;
|
|
|
|
for (const v of set) result += v;
|
|
|
|
return result;
|
|
|
|
}
|