diff options
Diffstat (limited to 'deps/v8/test/js-perf-test/Array/run.js')
-rw-r--r-- | deps/v8/test/js-perf-test/Array/run.js | 73 |
1 files changed, 71 insertions, 2 deletions
diff --git a/deps/v8/test/js-perf-test/Array/run.js b/deps/v8/test/js-perf-test/Array/run.js index baf2553eb3..15b4da94c2 100644 --- a/deps/v8/test/js-perf-test/Array/run.js +++ b/deps/v8/test/js-perf-test/Array/run.js @@ -2,16 +2,85 @@ // 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('join.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; |