node/deps/v8/test/js-perf-test/Collections/weakmap.js
Refael Ackermann ed74896b1f deps: update V8 to 7.5.288.22
PR-URL: https://github.com/nodejs/node/pull/27375
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
2019-06-01 09:55:12 -04:00

132 lines
2.8 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 MapBenchmark = new BenchmarkSuite('WeakMap', [1000], [
new Benchmark('Set', false, false, 0, WeakMapSet, WeakMapSetupBase,
WeakMapTearDown),
new Benchmark('Has', false, false, 0, WeakMapHas, WeakMapSetup,
WeakMapTearDown),
new Benchmark('Get', false, false, 0, WeakMapGet, WeakMapSetup,
WeakMapTearDown),
new Benchmark('Delete', false, false, 0, WeakMapDelete, WeakMapSetup,
WeakMapTearDown),
]);
var MapBenchmark = new BenchmarkSuite('WeakMapSetGet-Large', [1e7], [
new Benchmark('Set-Get', false, true, 1, WeakMapSetGetLarge,
WeakMapSetupBaseLarge, WeakMapTearDown),
]);
var MapBenchmark = new BenchmarkSuite('WeakMapSet-Huge', [1e8], [
new Benchmark('Set-Get', false, true, 1, WeakMapSetHuge,
WeakMapSetupBaseLarge, WeakMapTearDown),
]);
var MapBenchmark = new BenchmarkSuite('WeakMap-Constructor', [1000], [
new Benchmark('Constructor', false, false, 0, WeakMapConstructor, SetupObjectKeyValuePairs,
WeakMapTearDown),
]);
var wm;
function WeakMapSetupBase() {
SetupObjectKeys();
wm = new WeakMap;
}
function WeakMapSetupBaseLarge() {
SetupObjectKeys(2 * LargeN);
wm = new WeakMap;
}
function WeakMapSetup() {
WeakMapSetupBase();
WeakMapSet();
}
function WeakMapTearDown() {
wm = null;
}
function WeakMapConstructor() {
wm = new WeakMap(keyValuePairs);
}
function WeakMapSet() {
for (var i = 0; i < N; i++) {
wm.set(keys[i], i);
}
}
function WeakMapHas() {
for (var i = 0; i < N; i++) {
if (!wm.has(keys[i])) {
throw new Error();
}
}
for (var i = N; i < 2 * N; i++) {
if (wm.has(keys[i])) {
throw new Error();
}
}
}
function WeakMapGet() {
for (var i = 0; i < N; i++) {
if (wm.get(keys[i]) !== i) {
throw new Error();
}
}
for (var i = N; i < 2 * N; i++) {
if (wm.get(keys[i]) !== undefined) {
throw new Error();
}
}
}
function WeakMapDelete() {
// This is run more than once per setup so we will end up deleting items
// more than once. Therefore, we do not check the return value of delete.
for (var i = 0; i < N; i++) {
wm.delete(keys[i]);
}
}
function WeakMapSetGetLarge() {
for (var i = 0; i < LargeN; i++) {
wm.set(keys[i * 2], i);
}
for (var i = 0; i < LargeN; i++) {
if (wm.get(keys[i * 2]) !== i) {
throw new Error();
}
}
for (var i = N; i < 2 * LargeN; i++) {
if (wm.get(keys[i * 2 + 1]) !== undefined) {
throw new Error();
}
}
}
function WeakMapSetHuge() {
function Foo(i) {
this.x = i;
}
let obj;
for (let i = 0; i < LargeN; i++) {
obj = new Foo(i); // Make sure we do not scalar-replace the object.
wm.set(obj, 1);
}
}