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