| // 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; | |
| } |