#!/usr/bin/env bash
# plb2: elapsed time of the four tasks in seven languages (C, Rust, Go and Java compiled beforehand
# with each Makefile; Python, JavaScript and Julia interpreted). One run each, wall-clock seconds.
# Interpreters keep caches under $HOME (Julia depot, Java, Go); keep them inside the row.
export HOME=/var/tmp/kv-repro/023-attractivechaos-plb2/data/home JULIA_DEPOT_PATH=/var/tmp/kv-repro/023-attractivechaos-plb2/data/julia
mkdir -p "$HOME"
python3 - <<'PY'
import subprocess, time
langs = {
    "c":          lambda t: [f"./{t}"],
    "rust":       lambda t: [f"./{t}"],
    "go":         lambda t: [f"./{t}"],
    "java":       lambda t: ["java", t],
    "javascript": lambda t: ["node", f"{t}.js"],
    "python":     lambda t: ["python3", f"{t}.py"],
    "julia":      lambda t: ["julia", f"{t}.jl"],
}
for lang, cmd in langs.items():
    print(f"KVERITAS_PHASE name={lang}", flush=True)
    for task in ("nqueen", "matmul", "sudoku", "bedcov"):
        argv = cmd(task)
        start = time.perf_counter()
        try:
            r = subprocess.run(argv, cwd=f"src/{lang}", capture_output=True, text=True, timeout=1200)
        except subprocess.TimeoutExpired:
            print(f"{lang} {task}: timed out after 1200 s", flush=True)
            continue
        secs = time.perf_counter() - start
        out = r.stdout.strip().splitlines()
        print(f"{lang} {task}: exit {r.returncode}, {secs:.2f} s, last output: {out[-1] if out else ''}", flush=True)
        if r.returncode == 0:
            print(f"KVERITAS_METRIC name={lang}_{task}_seconds value={secs:.4f}", flush=True)
            if lang == "c":
                print(f"KVERITAS_CLAIM metric=c_{task}_seconds value={secs:.4f}", flush=True)
PY
