'use strict'; const common = require('../common'); const assert = require('assert'); const bench = common.createBenchmark(main, { n: [1e8], type: [ 'validateStringArray', 'validateBooleanArray', ], arrayLength: [ 0, 1, 10, 100, ], }, { flags: ['--expose-internals'], }); function getValidateFactory(type, arrayLength) { const { validateBooleanArray, validateStringArray, } = require('internal/validators'); switch (type) { case 'validateBooleanArray': return [ (n) => validateBooleanArray(n, 'n'), Array.from({ length: arrayLength }, (v, i) => ((i & 1) === 0)), ]; case 'validateStringArray': return [ (n) => validateStringArray(n, 'n'), Array.from({ length: arrayLength }, (v, i) => `foo${i}`), ]; } } function main({ n, type, arrayLength }) { const [validate, value] = getValidateFactory(type, arrayLength); // Warm up. const length = 1024; const array = []; for (let i = 0; i < length; ++i) { array.push(validate(value)); } bench.start(); for (let i = 0; i < n; ++i) { const index = i % length; array[index] = validate(value); } bench.end(n); // Verify the entries to prevent dead code elimination from making // the benchmark invalid. for (let i = 0; i < length; ++i) { assert.strictEqual(typeof array[i], 'undefined'); } }