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

const bench = common.createBenchmark(main, {
  type: ['noencode', 'encodemany', 'encodelast', 'array'],
  n: [1e6],
});

function main({ type, n }) {
  const inputs = {
    noencode: {
      foo: 'bar',
      baz: 'quux',
      xyzzy: 'thud'
    },
    encodemany: {
      '\u0080\u0083\u0089': 'bar',
      '\u008C\u008E\u0099': 'quux',
      'xyzzy': '\u00A5q\u00A3r'
    },
    encodelast: {
      foo: 'bar',
      baz: 'quux',
      xyzzy: 'thu\u00AC'
    },
    array: {
      foo: [],
      baz: ['bar'],
      xyzzy: ['bar', 'quux', 'thud']
    }
  };
  const input = inputs[type];

  // Force-optimize querystring.stringify() so that the benchmark doesn't get
  // disrupted by the optimizer kicking in halfway through.
  for (const name in inputs)
    querystring.stringify(inputs[name]);

  bench.start();
  for (let i = 0; i < n; i += 1)
    querystring.stringify(input);
  bench.end(n);
}
