#!/usr/bin/env python # Copyright (C) 2009, 2010 Roman Zimbelmann <romanz@lavabit.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. """ Run all the benchmarks inside this directory. Usage: ./all_benchmarks.py [count] [regexp-filters...] """ import os import re import sys import time if __name__ == '__main__': count = int(sys.argv[1]) if len(sys.argv) > 1 else 10 regexes = [re.compile(fltr) for fltr in sys.argv[2:]] modules = (fname[:-3] for fname in os.listdir(sys.path[0]) \ if fname[:3] == 'bm_' and fname[-3:] == '.py') benchmarks = [] # find all benchmark (class, methodname) pairs for val in [__import__(module) for module in modules]: for cls in vars(val).values(): if type(cls) == type: for methodname in vars(cls): if methodname.startswith('bm_'): benchmarks.append((cls, methodname)) for cls, methodname in benchmarks: full_method_name = "{0}.{1}".format(cls.__name__, methodname) if all(re.search(full_method_name) for re in regexes): method = getattr(cls(), methodname) t1 = time.time() try: method(count) except: print("{0} failed!".format(full_method_name)) raise else: t2 = time.time() print("{0:60}: {1:10}s".format(full_method_name, t2 - t1))