blob: 0dcc72a69968331f3f3bef396e21d95b49b43f27 [file] [edit]
//@ $skipModes << :lockdown
"use strict"
const DEBUG = false;
const consoleStub = console || {
log: print
}
var console = consoleStub
function testFor(arr) {
let sum = 0|0
for (let i = 0; i < arr.length; i++) {
let val = arr[i]
if (val !== undefined)
sum = ((sum|0) + (val|0))|0
}
return sum
}
noInline(testFor)
function testForOf(arr) {
let sum = 0|0
for (const item of arr) {
if (item !== undefined)
sum = ((sum|0) + (item|0))|0
}
return sum
}
noInline(testForOf)
function testForEach(arr) {
let sum = 0|0
arr.forEach(item => sum = ((sum|0) + (item|0))|0)
return sum
}
noInline(testForEach)
const warmup = 5000
const test = 20
let run = 1
const arr1 = [1, 2, 3, 4, 5]
delete arr1[2]
function runTest() {
let resultsTotal = []
let resultsFor = []
let resultsForOf = []
let resultsForEach = []
for (let i = 0; i < test; ++i) {
{
let start = performance.now()
for (let i = 0; i < run; i++) {
testFor(arr1)
testForOf(arr1)
testForEach(arr1)
}
resultsTotal.push(performance.now() - start)
}
{
let start = performance.now()
for (let i = 0; i < run; i++) {
testFor(arr1)
}
resultsFor.push(performance.now() - start)
}
{
let start = performance.now()
for (let i = 0; i < run; i++) {
testForEach(arr1)
}
resultsForEach.push(performance.now() - start)
}
{
let start = performance.now()
for (let i = 0; i < run; i++) {
testForOf(arr1)
}
resultsForOf.push(performance.now() - start)
}
}
return [
resultsTotal.reduce((a, b) => a + b, 0) / resultsTotal.length,
resultsFor.reduce((a, b) => a + b, 0) / resultsFor.length,
resultsForOf.reduce((a, b) => a + b, 0) / resultsForOf.length,
resultsForEach.reduce((a, b) => a + b, 0) / resultsForEach.length
]
}
noInline(runTest)
for (let i = 0; i < warmup; i++) {
runTest()
run = (run + i) % 10 // make sure it isn't a constant
}
run = 1_000_000
globalThis.log = function (v) { };
if (DEBUG)
log = console.log.bind(console);
log("Warmup complete")
let [resultsTotal, resultsFor, resultsForOf, resultsForEach] = runTest()
log("Total:", resultsTotal)
log("For:", resultsFor)
log("ForOf:", resultsForOf)
log("ForEach:", resultsForEach)