aboutsummaryrefslogtreecommitdiff
path: root/benchmark.py
blob: 1460a5e0a5c75bd290ce803045cc134d9e7179f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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))