| // 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. |
| |
| load('../base.js'); |
| |
| let array; |
| // Initialize func variable to ensure the first test doesn't benefit from |
| // global object property tracking. |
| let func = 0; |
| let this_arg; |
| let result; |
| const array_size = 100; |
| const max_index = array_size - 1; |
| |
| // mc stands for "Make Closure," it's a handy function to get a fresh |
| // closure unpolluted by IC feedback for a 2nd-order array builtin |
| // test. |
| function mc(name, generic = false) { |
| if (generic) { |
| return new Function( |
| `result = Array.prototype.${name}.call(array, func, this_arg);`); |
| } |
| return new Function(`result = array.${name}(func, this_arg);`); |
| } |
| |
| function benchy(name, test, testSetup) { |
| new BenchmarkSuite(name, [1000], |
| [ |
| new Benchmark(name, false, false, 0, test, testSetup, ()=>{}) |
| ]); |
| } |
| |
| function SmiSetup() { |
| array = Array.from({ length: array_size }, (_, i) => i); |
| } |
| |
| function DoubleSetup() { |
| array = Array.from({ length: array_size }, (_, i) => i + 0.5); |
| } |
| |
| function FastSetup() { |
| array = Array.from({ length: array_size }, (_, i) => `value ${i}`); |
| } |
| |
| function ObjectSetup() { |
| array = { length: array_size }; |
| for (var i = 0; i < array_size; i++) { |
| array[i] = i; |
| } |
| } |
| |
| function DefineHigherOrderTests(tests) { |
| let i = 0; |
| while (i < tests.length) { |
| const name = tests[i++]; |
| const testFunc = tests[i++]; |
| const setupFunc = tests[i++]; |
| const callback = tests[i++]; |
| |
| let setupFuncWrapper = () => { |
| func = callback; |
| this_arg = undefined; |
| setupFunc(); |
| }; |
| benchy(name, testFunc, setupFuncWrapper); |
| } |
| } |
| |
| // Higher-order Array builtins. |
| load('filter.js'); |
| load('map.js'); |
| load('every.js'); |
| load('some.js'); |
| load('for-each.js'); |
| load('reduce.js'); |
| load('reduce-right.js'); |
| load('find.js'); |
| load('find-index.js'); |
| load('of.js'); |
| |
| // Other Array builtins. |
| load('join.js'); |
| load('to-string.js'); |
| |
| var success = true; |
| |
| function PrintResult(name, result) { |
| print(name + '-Array(Score): ' + result); |
| } |
| |
| function PrintStep(name) {} |
| |
| function PrintError(name, error) { |
| PrintResult(name, error); |
| success = false; |
| } |
| |
| |
| BenchmarkSuite.config.doWarmup = undefined; |
| BenchmarkSuite.config.doDeterministic = undefined; |
| |
| BenchmarkSuite.RunSuites({ NotifyResult: PrintResult, |
| NotifyError: PrintError, |
| NotifyStep: PrintStep }); |