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('Set', [1000], [
7ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  new Benchmark('Add', false, false, 0, SetAdd),
8ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  new Benchmark('Has', false, false, 0, SetHas, SetSetup, SetTearDown),
9ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  new Benchmark('Delete', false, false, 0, SetDelete, SetSetup, SetTearDown),
10ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  new Benchmark('ForEach', false, false, 0, SetForEach, SetSetup, SetTearDown),
11ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org]);
12ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
13ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
14ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgvar set;
15ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgvar N = 10;
16ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
17ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
18ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction SetSetup() {
19ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  set = new Set;
20ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  for (var i = 0; i < N; i++) {
21ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    set.add(i);
22ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  }
23ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
24ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
25ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
26ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction SetTearDown() {
27ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  map = null;
28ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
29ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
30ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
31ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction SetAdd() {
32ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  SetSetup();
33ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  SetTearDown();
34ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
35ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
36ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
37ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction SetHas() {
38ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  for (var i = 0; i < N; i++) {
39ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    if (!set.has(i)) {
40ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org      throw new Error();
41ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    }
42ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  }
43ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  for (var i = N; i < 2 * N; i++) {
44ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    if (set.has(i)) {
45ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org      throw new Error();
46ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    }
47ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  }
48ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
49ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
50ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
51ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction SetDelete() {
52ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  // This is run more than once per setup so we will end up deleting items
53ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  // more than once. Therefore, we do not the return value of delete.
54ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  for (var i = 0; i < N; i++) {
55ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    set.delete(i);
56ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  }
57ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
58ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
59ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org
60ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgfunction SetForEach() {
61ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  set.forEach(function(v, k) {
62ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    if (v !== k) {
63ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org      throw new Error();
64ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org    }
65ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org  });
66ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org}
67