|  | // 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('Basic1', [1000], [ | 
|  | new Benchmark('BasicRest1', false, false, 0, | 
|  | BasicRest1, BasicRest1Setup, BasicRest1TearDown) | 
|  | ]); | 
|  |  | 
|  | new BenchmarkSuite('ReturnArgsBabel', [10000], [ | 
|  | new Benchmark('ReturnArgsBabel', false, false, 0, | 
|  | ReturnArgsBabel, ReturnArgsBabelSetup, | 
|  | ReturnArgsBabelTearDown) | 
|  | ]); | 
|  |  | 
|  | new BenchmarkSuite('ReturnArgsNative', [10000], [ | 
|  | new Benchmark('ReturnArgsNative', false, false, 0, | 
|  | ReturnArgsNative, ReturnArgsNativeSetup, | 
|  | ReturnArgsNativeTearDown) | 
|  | ]); | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  | var result; | 
|  |  | 
|  | function basic_rest_fn_1(factor, ...values) { | 
|  | var result = 0; | 
|  | for (var i = 0; i < values.length; ++i) { | 
|  | result += (factor * values[i]); | 
|  | } | 
|  | return result; | 
|  | } | 
|  |  | 
|  | function BasicRest1Setup() {} | 
|  |  | 
|  | function BasicRest1() { | 
|  | result = basic_rest_fn_1(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); | 
|  | } | 
|  |  | 
|  | function BasicRest1TearDown() { | 
|  | return result == 550; | 
|  | } | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  | var length = 50; | 
|  | var numbers = Array.apply(null, {length}).map(Number.call, Number); | 
|  | var strings = numbers.map(String.call, String); | 
|  |  | 
|  | function ReturnArgsBabelFunction(unused) { | 
|  | "use strict"; | 
|  | for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), | 
|  | _key = 1; | 
|  | _key < _len; _key++) { | 
|  | args[_key - 1] = arguments[_key]; | 
|  | } | 
|  | return args; | 
|  | } | 
|  |  | 
|  | function ReturnArgsBabelSetup() { | 
|  | // Warm up with HOLEY_ELEMENTS | 
|  | result = ReturnArgsBabelFunction(...strings); | 
|  | // Warm up with HOLEY_SMI_ELEMENTS | 
|  | result = ReturnArgsBabelFunction(...numbers); | 
|  | } | 
|  |  | 
|  | function ReturnArgsBabel() { | 
|  | result = ReturnArgsBabelFunction(...strings); | 
|  | result = ReturnArgsBabelFunction(...numbers); | 
|  | } | 
|  |  | 
|  | function ReturnArgsBabelTearDown() { | 
|  | return result.indexOf(0) === 0; | 
|  | } | 
|  |  | 
|  | // ---------------------------------------------------------------------------- | 
|  |  | 
|  | function ReturnArgsNativeFunction(unused, ...args) { | 
|  | return args; | 
|  | } | 
|  |  | 
|  | function ReturnArgsNativeSetup() { | 
|  | // Warm up with HOLEY_ELEMENTS | 
|  | result = ReturnArgsNativeFunction(...strings); | 
|  | // Warm up with HOLEY_SMI_ELEMENTS | 
|  | result = ReturnArgsNativeFunction(...numbers); | 
|  | } | 
|  |  | 
|  | function ReturnArgsNative() { | 
|  | result = ReturnArgsNativeFunction(...strings); | 
|  | result = ReturnArgsNativeFunction(...numbers); | 
|  | } | 
|  |  | 
|  | function ReturnArgsNativeTearDown() { | 
|  | return result.indexOf(0) === 0; | 
|  | } |