import Benchmark from "benchmark";
import baseline from "@babel-baseline/parser";
import current from "@babel/parser";
import { report } from "../../util.mjs";

const suite = new Benchmark.Suite();
// All codepoints in [0x4e00, 0x9ffc] are valid identifier name per Unicode 13
function createInput(length) {
  if (length > 0x9ffc - 0x4e00) {
    throw new Error(
      `Length greater than ${
        0x9ffc - 0x4e00
      } is not supported! Consider modify the \`createInput\`.`
    );
  }
  let source = "export { ";
  for (let i = 0; i < length; i++) {
    source += String.fromCharCode(0x4e00 + i) + ",";
  }
  return source + " } from './foo'";
}
function benchCases(name, implementation, options) {
  for (const length of [256, 512, 1024, 2048]) {
    const input = createInput(length);
    suite.add(`${name} ${length} length-1 named export`, () => {
      implementation.parse(input, options);
    });
  }
}

benchCases("baseline", baseline, { sourceType: "module" });
benchCases("current", current, { sourceType: "module" });

suite.on("cycle", report).run();
