1'use strict'; 2const common = require('../common'); 3 4const bench = common.createBenchmark(main, { 5 type: ['one_byte', 'two_bytes', 'three_bytes', 'four_bytes'], 6 encoding: ['utf8', 'base64'], 7 repeat: [1, 2, 16, 256], // x16 8 n: [4e6], 9}); 10 11// 16 chars each 12const chars = { 13 one_byte: 'hello brendan!!!', 14 two_bytes: 'ΰαβγδεζηθικλμνξο', 15 three_bytes: '挰挱挲挳挴挵挶挷挸挹挺挻挼挽挾挿', 16 four_bytes: '', 17}; 18 19function getInput(type, repeat, encoding) { 20 const original = (repeat === 1) ? chars[type] : chars[type].repeat(repeat); 21 if (encoding === 'base64') { 22 Buffer.from(original, 'utf8').toString('base64'); 23 } 24 return original; 25} 26 27function main({ n, repeat, encoding, type }) { 28 const data = getInput(type, repeat, encoding); 29 const expected = Buffer.byteLength(data, encoding); 30 let changed = false; 31 bench.start(); 32 for (let i = 0; i < n; i++) { 33 const actual = Buffer.byteLength(data, encoding); 34 if (expected !== actual) { changed = true; } 35 } 36 bench.end(n); 37 if (changed) { 38 throw new Error('Result changed during iteration'); 39 } 40} 41