'use strict';

const common = require('../common.js');
const assert = require('assert');
const bench = common.createBenchmark(main, {
  type: [
    'fast-alloc',
    'fast-alloc-fill',
    'fast-allocUnsafe',
    'slow-allocUnsafe',
  ],
  len: [10, 1024, 4096, 8192],
  n: [6e5]
});

function main({ len, n, type }) {
  let fn, i;
  switch (type) {
    case '':
    case 'fast-alloc':
      fn = Buffer.alloc;
      break;
    case 'fast-alloc-fill':
      bench.start();
      for (i = 0; i < n; i++) {
        Buffer.alloc(len, 0);
      }
      bench.end(n);
      return;
    case 'fast-allocUnsafe':
      fn = Buffer.allocUnsafe;
      break;
    case 'slow-allocUnsafe':
      fn = Buffer.allocUnsafeSlow;
      break;
    default:
      assert.fail('Should not get here');
  }

  bench.start();
  for (i = 0; i < n; i++) {
    fn(len);
  }
  bench.end(n);
}
