1'use strict';
2const SlowBuffer = require('buffer').SlowBuffer;
3const common = require('../common.js');
4const assert = require('assert');
5
6const bench = common.createBenchmark(main, {
7  size: [512, 4096, 16386],
8  type: ['fast'],
9  method: ['for', 'forOf', 'iterator'],
10  n: [1e3],
11});
12
13const methods = {
14  'for': benchFor,
15  'forOf': benchForOf,
16  'iterator': benchIterator,
17};
18
19function main({ size, type, method, n }) {
20  const buffer = type === 'fast' ?
21    Buffer.alloc(size) :
22    SlowBuffer(size).fill(0);
23
24  const fn = methods[method];
25
26  bench.start();
27  fn(buffer, n);
28  bench.end(n);
29}
30
31function benchFor(buffer, n) {
32  for (let k = 0; k < n; k++) {
33    for (let i = 0; i < buffer.length; i++) {
34      assert(buffer[i] === 0);
35    }
36  }
37}
38
39function benchForOf(buffer, n) {
40  for (let k = 0; k < n; k++) {
41    for (const b of buffer) {
42      assert(b === 0);
43    }
44  }
45}
46
47function benchIterator(buffer, n) {
48  for (let k = 0; k < n; k++) {
49    const iter = buffer[Symbol.iterator]();
50    let cur = iter.next();
51
52    while (!cur.done) {
53      assert(cur.value === 0);
54      cur = iter.next();
55    }
56
57  }
58}
59