def test_expand_simple_macro_once(self): """expand-1 should expand macro call expression once""" env = default_env() interpret("""(define swp (macro (foo bar) (list bar foo)))""", env) assert_equals("(42 #t)", interpret("(expand-1 '(swp #t 42))", env))
def test_if_with_variable_lookup(self): """Test evaluation of expressions (variable lookup) within if form""" env = default_env() interpret("(define pred #f)", env) interpret("(define else 42)", env) assert_equals("42", interpret("(if pred then else)", env))
def test_factorial(self): """Simple factorial""" env = default_env() interpret(""" (define fact (lambda (n) (if (<= n 1) 1 (* n (fact (- n 1)))))) """, env) assert_equals("120", interpret("(fact 5)", env))
def IGNORED_test_check_nil_test_fn(self): """Test the `nil?` function `nil?` returns #t on empty lists, and #f otherwise""" env = default_env() assert_equals("#t", interpret("(nil? (list))")) assert_equals("#t", interpret("(nil? 'nil)")) assert_equals("#t", interpret("(nil? (cdr (list 1)))")) assert_equals("#f", interpret("(nil? 'foo)")) assert_equals("#f", interpret("(nil? (list 'foo 'bar))"))
def test_gcd(self): """Greates common dividor""" env = default_env() interpret(""" (define gcd (lambda (a b) (if (= 0 b) a (gcd b (mod a b))))) """, env) assert_equals("6", interpret("(gcd 108 30)", env)) assert_equals("1", interpret("(gcd 17 5)", env))