// Copyright 2014 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('Call', [1000], [ new Benchmark('Call-Sum', false, false, 0, CallSum, CallSumSetup, CallSumTearDown), ]); new BenchmarkSuite('CallMethod', [1000], [ new Benchmark('CallMethod-Sum', false, false, 0, CallMethodSum, CallSumSetup, CallMethodSumTearDown), ]); new BenchmarkSuite('CallNew', [1000], [ new Benchmark('CallNew-Sum', false, false, 0, CallNewSum, CallSumSetup, CallNewSumTearDown), ]); var result; var objectToSpread; function sum() { var result = arguments[0]; for (var i = 1; i < arguments.length; ++i) { result += arguments[i]; } return result; } function CallSumSetup() { result = undefined; objectToSpread = []; for (var i = 0; i < 100; ++i) objectToSpread.push(i + 1); } function CallSum() { result = sum(...objectToSpread); } function CallSumTearDown() { var expected = 100 * (100 + 1) / 2; return result === expected; } // ---------------------------------------------------------------------------- var O = { sum: sum }; function CallMethodSum() { result = O.sum(...objectToSpread); } function CallMethodSumTearDown() { var expected = 100 * (100 + 1) / 2; return result === expected; } // ---------------------------------------------------------------------------- function Sum() { var result = arguments[0]; for (var i = 1; i < arguments.length; ++i) { result += arguments[i]; } return this.sum = result; } function CallNewSum() { result = new Sum(...objectToSpread); } function CallNewSumTearDown() { var expected = 100 * (100 + 1) / 2; return result instanceof Sum && result.sum === expected; }