| #!/usr/bin/python3 |
| |
| import os |
| import sys |
| if sys.version_info[0] < 3: raise Exception("Python 3 or a more recent version is required.") |
| import json |
| import subprocess |
| |
| average_num_times = 3 |
| max_accum_time = 60 # don't take too long on a test - stop averaging if time exceeds some amount of seconds |
| |
| with open('tests.json') as data_file: |
| data = json.load(data_file) |
| |
| def runBench(prog): |
| result = subprocess.Popen(prog.split(), stdout = subprocess.PIPE).communicate()[0] |
| result = result.splitlines() |
| for line in result: |
| line = line.decode("utf-8") |
| if line.startswith("Time running "): |
| return str(line.rsplit(' ', 1)[-1]) |
| return "" |
| |
| call = 'python ./bench.py' |
| the_os = 'linux' |
| if os.name == "nt": |
| call = 'python bench.py' |
| the_os = 'windows' |
| |
| f = open('results.txt', 'w') |
| for test in ['header', 'asserts', 'runtime']: |
| print( '\n************** ' + test + '\n') |
| f.write('\n************** ' + test + '\n') |
| f.flush() |
| for framework in ['doctest', 'catch']: |
| print( '== ' + framework + '\n') |
| f.write('== ' + framework + '\n') |
| f.flush() |
| for config in data['compilers'][the_os]: |
| for curr in data[test][1]: |
| if curr[0] == framework or curr[0] == "any": |
| command = call + data[test][0] + config + curr[1] + (' --catch' if framework == 'catch' else '') |
| print(command) |
| |
| accum = float(0) |
| num_times = 0 |
| for i in range(0, average_num_times): |
| res = float(runBench(command)) |
| print(res) |
| accum += res |
| num_times += 1 |
| |
| if accum > max_accum_time: |
| break |
| |
| average = "{:7.2f}".format(round(accum / num_times, 2)) |
| print("AVERAGE: " + average) |
| f.write(average + " | ") |
| f.flush() |
| f.write("\n") |
| f.flush() |
| |
| f.close() |
| |
| |