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

const types = [
  'Uint8',
  'Uint16LE',
  'Uint16BE',
  'Uint32LE',
  'Uint32BE',
  'Int8',
  'Int16LE',
  'Int16BE',
  'Int32LE',
  'Int32BE',
  'Float32LE',
  'Float32BE',
  'Float64LE',
  'Float64BE',
];

const bench = common.createBenchmark(main, {
  type: types,
  n: [1e6]
});

const INT8 = 0x7f;
const INT16 = 0x7fff;
const INT32 = 0x7fffffff;
const UINT8 = INT8 * 2;
const UINT16 = INT16 * 2;
const UINT32 = INT32 * 2;

const mod = {
  setInt8: INT8,
  setInt16: INT16,
  setInt32: INT32,
  setUint8: UINT8,
  setUint16: UINT16,
  setUint32: UINT32
};

function main({ n, type }) {
  type = type || 'Uint8';
  const ab = new ArrayBuffer(8);
  const dv = new DataView(ab, 0, 8);
  const le = /LE$/.test(type);
  const fn = `set${type.replace(/[LB]E$/, '')}`;

  if (/int/i.test(fn))
    benchInt(dv, fn, n, le);
  else
    benchFloat(dv, fn, n, le);
}

function benchInt(dv, fn, len, le) {
  const m = mod[fn];
  const method = dv[fn];
  bench.start();
  for (let i = 0; i < len; i++) {
    method.call(dv, 0, i % m, le);
  }
  bench.end(len);
}

function benchFloat(dv, fn, len, le) {
  const method = dv[fn];
  bench.start();
  for (let i = 0; i < len; i++) {
    method.call(dv, 0, i * 0.1, le);
  }
  bench.end(len);
}
