summaryrefslogtreecommitdiff
path: root/benchmark/es/string-concatenations.js
blob: b7f5c319361c6cc6bebc8d9da7e6b8eda59d68f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
'use strict';

const common = require('../common.js');

const configs = {
  n: [1e3],
  mode: [
    'multi-concat',
    'multi-join',
    'multi-template',
    'to-string-string',
    'to-string-concat',
    'to-string-template',
  ],
};

const bench = common.createBenchmark(main, configs);


function main(conf) {
  const n = +conf.n;

  const str = 'abc';
  const num = 123;

  let string;

  switch (conf.mode) {
    case '':
      // Empty string falls through to next line as default, mostly for tests.
    case 'multi-concat':
      bench.start();
      for (let i = 0; i < n; i++)
        string = '...' + str + ', ' + num + ', ' + str + ', ' + num + '.';
      bench.end(n);
      break;
    case 'multi-join':
      bench.start();
      for (let i = 0; i < n; i++)
        string = ['...', str, ', ', num, ', ', str, ', ', num, '.'].join('');
      bench.end(n);
      break;
    case 'multi-template':
      bench.start();
      for (let i = 0; i < n; i++)
        string = `...${str}, ${num}, ${str}, ${num}.`;
      bench.end(n);
      break;
    case 'to-string-string':
      bench.start();
      for (let i = 0; i < n; i++)
        string = String(num);
      bench.end(n);
      break;
    case 'to-string-concat':
      bench.start();
      for (let i = 0; i < n; i++)
        string = '' + num;
      bench.end(n);
      break;
    case 'to-string-template':
      bench.start();
      for (let i = 0; i < n; i++)
        string = `${num}`;
      bench.end(n);
      break;
    default:
      throw new Error('Unexpected method');
  }

  return string;
}