summaryrefslogtreecommitdiff
path: root/utils/benchmark.py
blob: 8bca80381d716f3c1a6804164f0d0e9e223ccc4d (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
#!/usr/bin/env python

import os.path
import sys
import timeit

sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))

import gemato.hash


def benchmark_one(path, hashes):
	f = lambda: gemato.hash.hash_path(path, hashes)
	print(f"{hashes} -> [ ", end='', flush=True)
	results = []
	for t in (timeit.timeit(f, number=1) for i in range(5)):
		print(f"{t:.4}", end=" ", flush=True)
		results.append(t)
	print(f"] -> min: {min(results):.4}")


def benchmark(path, hash_sets):
	if not hash_sets:
		hash_sets = [
			["sha256"],
			["sha256", "blake2b"],
			["sha256", "blake2b", "sha512"],
		]
	else:
		hash_sets = [x.split() for x in hash_sets]

	for hashes in hash_sets:
		benchmark_one(path, hashes)


if __name__ == '__main__':
	if len(sys.argv) < 2:
		print(f'Usage: {sys.argv[0]} <test-file> [<hash-set>...]')
		sys.exit(1)

	benchmark(sys.argv[1], sys.argv[2:])