1 //: So far the recipes we define can't run each other. Let's fix that. 2 3 :(scenario calling_recipe) 4 def main [ 5 f 6 ] 7 def f [ 8 3:num <- add 2, 2 9 ] 10 +mem: storing 4 in location 3 11 12 :(scenario return_on_fallthrough) 13 def main [ 14 f 15 1:num <- copy 0 16 2:num <- copy 0 17 3:num <- copy 0 18 ] 19 def f [ 20 4:num <- copy 0 21 5:num <- copy 0 22 ] 23 +run: f 24 # running f 25 +run: {4: "number"} <- copy {0: "literal"} 26 +run: {5: "number"} <- copy {0: "literal"} 27#!/usr/bin/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 tests inside the test/ directory as a test suite.""" if __name__ == '__main__': from re import compile from test import * from time import time from types import FunctionType as function from sys import argv bms = [] try: n = int(argv[1]) except IndexError: n = 10 if len(argv) > 2: args = [compile(re) for re in argv[2:]] def allow(name): for re in args: if re.search(name): return True else: return False else: allow = lambda name: True for key, val in vars().copy().items(): if key.startswith('bm_'): bms.extend(v for k,v in vars(val).items() if type(v) == type) for bmclass in bms: for attrname in vars(bmclass): if not attrname.startswith('bm_'): continue bmobj = bmclass() t1 = time() method = getattr(bmobj, attrname) methodname = "{0}.{1}".format(bmobj.__class__.__name__, method.__name__) if allow(methodname): try: method(n) except: print("{0} failed!".format(methodname)) raise else: t2 = time() print("{0:60}: {1:10}s".format(methodname, t2 - t1))