// bench_arith.js — arithmetic and number crunching benchmark (QuickJS)

const iterations = 2000000;

function bench_int_sum() {
  let s = 0;
  for (let i = 0; i < iterations; i++) {
    s = s + i;
  }
  return s;
}

function bench_int_mul_mod() {
  let s = 0;
  for (let i = 1; i < iterations; i++) {
    s = s + (i * 7 % 1000);
  }
  return s;
}

function bench_float_arith() {
  let s = 0.5;
  for (let i = 1; i < iterations; i++) {
    s = s + 1.0 / i;
  }
  return s;
}

function bench_branch() {
  let fizz = 0, buzz = 0, fizzbuzz = 0;
  for (let i = 1; i <= iterations; i++) {
    if (i % 15 === 0) {
      fizzbuzz = fizzbuzz + 1;
    } else if (i % 3 === 0) {
      fizz = fizz + 1;
    } else if (i % 5 === 0) {
      buzz = buzz + 1;
    }
  }
  return fizz + buzz + fizzbuzz;
}

function bench_nested() {
  let s = 0;
  const outer = 5000, inner = 5000;
  for (let i = 0; i < outer; i++) {
    for (let j = 0; j < inner; j++) {
      s = s + 1;
    }
  }
  return s;
}

function run(name, fn) {
  const start = performance.now();
  const result = fn();
  const elapsed = performance.now() - start;
  console.log(`  ${name}: ${elapsed.toFixed(2)} ms  (result: ${result})`);
}

console.log("=== Arithmetic Benchmark ===");
console.log(`  iterations: ${iterations}`);
run("int_sum      ", bench_int_sum);
run("int_mul_mod  ", bench_int_mul_mod);
run("float_arith  ", bench_float_arith);
run("branch       ", bench_branch);
run("nested_loop  ", bench_nested);
