aboutsummaryrefslogtreecommitdiff
path: root/benchmark.py
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark.py')
-rw-r--r--benchmark.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/benchmark.py b/benchmark.py
new file mode 100644
index 0000000..1460a5e
--- /dev/null
+++ b/benchmark.py
@@ -0,0 +1,48 @@
+import sys
+import time
+import json
+import random
+import collections
+import subprocess
+
+
+def random_stack(start, end):
+ st = list(range(start, end))
+ random.shuffle(st)
+ return st
+
+
+def run_bench_size(size, samples):
+ runs = []
+ for _ in range(samples):
+ st = random_stack(1, size + 1)
+ out = subprocess.check_output([f"./push_swap", *[str(x) for x in st]])
+ ops = out.decode().strip().split("\n")
+ runs.append({
+ "ops_num": len(ops),
+ "ops_counter": dict(collections.Counter(ops)),
+ })
+ return runs
+
+def run_bench(start, end, step, samples=1):
+ bench = {
+ "start": start,
+ "end": end,
+ "step": step,
+ "data": []
+ }
+ for i in range(start, end, step):
+ bench["data"].append(run_bench_size(i, samples))
+ return bench
+
+if __name__ == "__main__":
+ if len(sys.argv) != 4 and len(sys.argv) != 5:
+ print(f"Usage: {sys.argv[0]} start stop step [samples]")
+ sys.exit(1)
+ samples = int(sys.argv[4]) if len(sys.argv) == 5 else 1
+ with open("benchmark.json", "w") as file:
+ bench = run_bench(int(sys.argv[1]),
+ int(sys.argv[2]),
+ int(sys.argv[3]),
+ samples)
+ file.write(json.dumps(bench))