-- bench_arith.lua — arithmetic and number crunching benchmark (Lua)

local iterations = 2000000
local clock = os.clock

local function bench_int_sum()
  local s = 0
  for i = 0, iterations - 1 do
    s = s + i
  end
  return s
end

local function bench_int_mul_mod()
  local s = 0
  for i = 1, iterations - 1 do
    s = s + (i * 7 % 1000)
  end
  return s
end

local function bench_float_arith()
  local s = 0.5
  for i = 1, iterations - 1 do
    s = s + 1.0 / i
  end
  return s
end

local function bench_branch()
  local fizz, buzz, fizzbuzz = 0, 0, 0
  for i = 1, iterations do
    if i % 15 == 0 then
      fizzbuzz = fizzbuzz + 1
    elseif i % 3 == 0 then
      fizz = fizz + 1
    elseif i % 5 == 0 then
      buzz = buzz + 1
    end
  end
  return fizz + buzz + fizzbuzz
end

local function bench_nested()
  local s = 0
  local outer, inner = 5000, 5000
  for i = 0, outer - 1 do
    for j = 0, inner - 1 do
      s = s + 1
    end
  end
  return s
end

local function run(name, fn)
  local start = clock()
  local result = fn()
  local elapsed = (clock() - start) * 1000
  print(string.format("  %s: %.2f ms  (result: %s)", name, elapsed, tostring(result)))
end

print("=== Arithmetic Benchmark ===")
print(string.format("  iterations: %d", 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)
