1ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved.
2ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
3ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org// found in the LICENSE file.
4ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
5ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
6ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgvar SetBenchmark = new BenchmarkSuite('WeakSet', [1000], [
7ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  new Benchmark('Add', false, false, 0, WeakSetAdd),
8ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  new Benchmark('Has', false, false, 0, WeakSetHas, WeakSetSetup,
9ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org      WeakSetTearDown),
10ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  new Benchmark('Delete', false, false, 0, WeakSetDelete, WeakSetSetup,
11ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org      WeakSetTearDown),
12ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org]);
13ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
14ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
15ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgvar ws;
16ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgvar N = 10;
17ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgvar keys = [];
18ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
19ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
20ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfor (var i = 0; i < N * 2; i++) {
21ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  keys[i] = {};
22ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
23ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
24ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
25ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction WeakSetSetup() {
26ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  ws = new WeakSet;
27ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  for (var i = 0; i < N; i++) {
28ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    ws.add(keys[i]);
29ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  }
30ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
31ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
32ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
33ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction WeakSetTearDown() {
34ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  ws = null;
35ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
36ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
37ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
38ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction WeakSetAdd() {
39ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  WeakSetSetup();
40ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  WeakSetTearDown();
41ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
42ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
43ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
44ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction WeakSetHas() {
45ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  for (var i = 0; i < N; i++) {
46ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    if (!ws.has(keys[i])) {
47ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org      throw new Error();
48ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    }
49ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  }
50ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  for (var i = N; i < 2 * N; i++) {
51ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    if (ws.has(keys[i])) {
52ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org      throw new Error();
53ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    }
54ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  }
55ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
56ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
57ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
58ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction WeakSetDelete() {
59ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  // This is run more than once per setup so we will end up deleting items
60ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  // more than once. Therefore, we do not the return value of delete.
61ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  for (var i = 0; i < N; i++) {
62ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    ws.delete(keys[i]);
63ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  }
64ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
65