process_test_results.py
text/x-python
Filename: process_test_results.py
Type: text/x-python
Part: 1
import re
begin_pattern = re.compile("^### BEGIN r_size = ([0-9]+), s_size = ([0-9]+), hit_ratio = 1, key_size = ([0-9]+), extra_cols = ([0-9]+)")
time_pattern = re.compile("^Time: ([0-9.]+) ms ")
def read_file(path):
result = {}
with open(path) as f:
for line in f:
groups = re.match(begin_pattern, line)
if groups:
key = groups.group(1, 2, 3, 4)
groups = re.match(time_pattern, line)
if groups:
time = float(groups.group(1))
if key in result:
result[key].append(time)
else:
result[key] = [time]
return result
master = read_file("test.master.out")
patched = read_file("test.patched.out")
r_size = 50000000
s_sizes = (1000, 100000, 10000000)
key_sizes = (0, 8, 16, 32, 64)
extra_colss = (0, 2, 4)
margin_width = 12
column_width = 21
print "".ljust(margin_width) + "".join(["s={:,}".format(s_size).ljust(column_width) for s_size in s_sizes])
print "".ljust(margin_width) + "".join(["=" * (column_width - 1) + " " for s_size in s_sizes])
for key_size in key_sizes:
for extra_cols in extra_colss:
if extra_cols == 0:
if key_size == 0:
line = "int"
else:
line = "text(%d)" % key_size
else:
line = " + %d cols" % extra_cols
line = line.ljust(margin_width)
for s_size in s_sizes:
key = (str(r_size), str(s_size), str(key_size), str(extra_cols))
if key in master and key in patched:
master_times = sorted(master[key])
patched_times = sorted(patched[key])
master_worst_time = master_times[-1]
patched_worst_time = patched_times[-1]
master_median_time = master_times[1]
patched_median_time = patched_times[1]
cell = "w=%+.2f%%, m=%+.2f%%" % (((master_worst_time / patched_worst_time) - 1.0) * 100, ((master_median_time / patched_median_time) - 1.0) * 100)
else:
cell = ""
line += cell.ljust(column_width)
print line