|  | 
|  | 1 | +'use strict'; | 
|  | 2 | +const common = require('../common'); | 
|  | 3 | + | 
|  | 4 | +const 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 | 
|  | 12 | +const chars = { | 
|  | 13 | +  one_byte: 'hello brendan!!!', | 
|  | 14 | +  two_bytes: 'ΰαβγδεζηθικλμνξο', | 
|  | 15 | +  three_bytes: '挰挱挲挳挴挵挶挷挸挹挺挻挼挽挾挿', | 
|  | 16 | +  four_bytes: '𠜎𠜱𠝹𠱓𠱸𠲖𠳏𠳕𠴕𠵼𠵿𠸎𠸏𠹷𠺝𠺢', | 
|  | 17 | +}; | 
|  | 18 | + | 
|  | 19 | +function 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 | + | 
|  | 27 | +function 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 | +} | 
0 commit comments