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