aboutsummaryrefslogtreecommitdiff
path: root/generate_benchmarks.py
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-04-08 14:41:33 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-04-08 14:41:33 +0200
commit1a7efd92e7caee5dc6493190ba0915dfd88fa7bb (patch)
tree547b7604889dc8865e4daac1fcb6474fc624f1fc /generate_benchmarks.py
parentbde04c0f3399d40f8e0499328f61613d36deced6 (diff)
Benchmark framework
Diffstat (limited to 'generate_benchmarks.py')
-rw-r--r--generate_benchmarks.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/generate_benchmarks.py b/generate_benchmarks.py
new file mode 100644
index 0000000..cadeaf2
--- /dev/null
+++ b/generate_benchmarks.py
@@ -0,0 +1,39 @@
+import re
+from pathlib import Path
+
+bench_files = sorted(Path("src").rglob("bench_*.c"))
+
+lines: list[str] = []
+
+for f in bench_files:
+ lines.append(f'#include "{f}"')
+
+lines.append("")
+lines.append(Path("base_bench.c").read_text())
+lines.append("i32 main() {")
+
+for f in bench_files:
+ # group label from filename: bench_vec.c -> "vec", bench_vec_sort.c -> "vec sort"
+ stem = f.stem.removeprefix("bench_").replace("_", " ")
+
+ src = f.read_text()
+
+ # find setup function (setup_* in this file)
+ setup_match = re.search(r"void (setup_\w+)\(", src)
+ setup = setup_match.group(1) if setup_match else None
+
+ funcs = re.findall(r"i32 (bench_\w+)\(", src)
+
+ if not funcs:
+ continue
+
+ reference = funcs[0]
+ print(f"Group '{stem}' from {f}: {funcs}")
+ lines.append(f' bench_group("{stem}");')
+ for i, func in enumerate(funcs):
+ compare_arg = f'"{reference}"' if i > 0 else "NULL"
+ lines.append(f' bench("{func}", {setup}, {func}, {compare_arg});')
+
+lines.append(" return 0;\n}\n")
+
+Path("bench.c").write_text("\n".join(lines))