1'use strict';
2
3const common = require('../common.js');
4const assert = require('assert');
5
6const bench = common.createBenchmark(main, {
7  len: [32, 256, 1024, 1024 * 8],
8  n: [1e6],
9  type: ['one-byte-string', 'two-byte-string', 'ascii'],
10  op: ['encode', 'encodeInto'],
11});
12
13function main({ n, op, len, type }) {
14  const encoder = new TextEncoder();
15  let base = '';
16
17  switch (type) {
18    case 'ascii':
19      base = 'a';
20      break;
21    case 'one-byte-string':
22      base = '\xff';
23      break;
24    case 'two-byte-string':
25      base = 'ğ';
26      break;
27  }
28
29  const input = base.repeat(len);
30  if (op === 'encode') {
31    const expected = encoder.encode(input);
32    let result;
33    bench.start();
34    for (let i = 0; i < n; i++)
35      result = encoder.encode(input);
36    bench.end(n);
37    assert.deepStrictEqual(result, expected);
38  } else {
39    const expected = new Uint8Array(len);
40    const subarray = new Uint8Array(len);
41    const expectedStats = encoder.encodeInto(input, expected);
42    let result;
43    bench.start();
44    for (let i = 0; i < n; i++)
45      result = encoder.encodeInto(input, subarray);
46    bench.end(n);
47    assert.deepStrictEqual(subarray, expected);
48    assert.deepStrictEqual(result, expectedStats);
49  }
50}
51