Esempio n. 1
0
 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))
Esempio n. 2
0
    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))
Esempio n. 3
0
 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))
Esempio n. 4
0
    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))"))
Esempio n. 5
0
 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))