class InterpreterTest(unittest.TestCase): """Tests the interpreter Other tests test are based on R5Rs, such as tail-recursion and static bindings. """ def __init__(self, *args): unittest.TestCase.__init__(self, *args) self.interpreter = Interpreter() def eval(self, expression): return self.interpreter.eval(expression) def assertEval(self, expression, result): """Asserts that the specified expression evaluates to the specified result. """ eval = self.interpreter.eval(expression) self.failIf(eval != result, "%s => %s, expected %s" % (expression, eval, result)) def assertFEval(self, expression, floatResult, epsilon=0.0001): """Asserts that the specified expressions evaluates to a number that differs at most epsilon from floatResult. """ eval = self.interpreter.eval(expression) self.failIf(abs(floatResult - eval) > epsilon, "%s ==> %f, expected %f" % (expression, eval, floatResult)) def assertError(self, expression): """Asserts that the specified expression raises an error at evaluation. """ try: self.interpreter.eval(expression) except Exception: return fail(expression + " did not raise an exception")
def __init__(self, *args): unittest.TestCase.__init__(self, *args) self.interpreter = Interpreter()