91 lines
2.5 KiB
JavaScript
91 lines
2.5 KiB
JavaScript
|
// Copyright 2015 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.
|
||
|
|
||
|
new BenchmarkSuite( 'With', [1000], [
|
||
|
new Benchmark('AccessOnSameLevel', false, false, 0,
|
||
|
AccessOnSameLevel, AccessOnSameLevelSetup,
|
||
|
AccessOnSameLevelTearDown),
|
||
|
new Benchmark('SetOnSameLevel', false, false, 0,
|
||
|
SetOnSameLevel, SetOnSameLevelSetup,
|
||
|
SetOnSameLevelTearDown),
|
||
|
new Benchmark('AccessOverPrototypeChain', false, false, 0,
|
||
|
AccessOverPrototypeChainSetup, AccessOverPrototypeChainSetup,
|
||
|
AccessOverPrototypeChainTearDown),
|
||
|
new Benchmark('CompetingScope', false, false, 0,
|
||
|
CompetingScope, CompetingScopeSetup, CompetingScopeTearDown)
|
||
|
]);
|
||
|
|
||
|
var objectUnderTest;
|
||
|
var objectUnderTestExtended;
|
||
|
var resultStore;
|
||
|
var VALUE_OF_PROPERTY = 'Simply a string';
|
||
|
var SOME_OTHER_VALUE = 'Another value';
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
function AccessOnSameLevelSetup() {
|
||
|
objectUnderTest = {first: VALUE_OF_PROPERTY};
|
||
|
}
|
||
|
|
||
|
function AccessOnSameLevel() {
|
||
|
with (objectUnderTest) {
|
||
|
resultStore = first;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function AccessOnSameLevelTearDown() {
|
||
|
return objectUnderTest.first === resultStore;
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
function AccessOverPrototypeChainSetup() {
|
||
|
objectUnderTest = {first: VALUE_OF_PROPERTY};
|
||
|
objectUnderTestExtended = Object.create(objectUnderTest);
|
||
|
objectUnderTestExtended.second = 'Another string';
|
||
|
}
|
||
|
|
||
|
function AccessOverPrototypeChain() {
|
||
|
with (objectUnderTestExtended) {
|
||
|
resultStore = first;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function AccessOverPrototypeChainTearDown() {
|
||
|
return objectUnderTest.first === resultStore;
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
function CompetingScopeSetup() {
|
||
|
objectUnderTest = {first: VALUE_OF_PROPERTY};
|
||
|
}
|
||
|
|
||
|
function CompetingScope() {
|
||
|
var first = 'Not correct';
|
||
|
with (objectUnderTest) {
|
||
|
resultStore = first;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function CompetingScopeTearDown() {
|
||
|
return objectUnderTest.first === resultStore;
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------------
|
||
|
|
||
|
function SetOnSameLevelSetup() {
|
||
|
objectUnderTest = {first: VALUE_OF_PROPERTY};
|
||
|
}
|
||
|
|
||
|
function SetOnSameLevel() {
|
||
|
with (objectUnderTest) {
|
||
|
first = SOME_OTHER_VALUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function SetOnSameLevelTearDown() {
|
||
|
return objectUnderTest.first === SOME_OTHER_VALUE;
|
||
|
}
|