def test_filter(): interpret(""" (define even (lambda (x) (eq (mod x 2) 0))) """, env) assert_equals("(2 4 6)", interpret("(filter even '(1 2 3 4 5 6))", env))
def test_gcd(): """Tests Greates Common Dividor (GCD).""" program = """ (define gcd (lambda (a b) (if (eq b 0) a (gcd b (mod a b))))) """ env = Environment() interpret(program, env) assert_equals("6", interpret("(gcd 108 30)", env)) assert_equals("1", interpret("(gcd 17 5)", env))
def test_append(): assert_equals("(1 2 3 4 5)", interpret("(append '(1 2) '(3 4 5))", env)) assert_equals("(#t #f 'maybe)", interpret("(append '(#t) '(#f 'maybe))", env)) assert_equals("()", interpret("(append '() '())", env))
def test_length(): assert_equals("5", interpret("(length '(1 2 3 4 5))", env)) assert_equals("3", interpret("(length '(#t '(1 2 3) 'foo-bar))", env)) assert_equals("0", interpret("(length '())", env))
def test_sum(): assert_equals("5", interpret("(sum '(1 1 1 1 1))", env)) assert_equals("10", interpret("(sum '(1 2 3 4))", env)) assert_equals("0", interpret("(sum '())", env))
def test_less_than(): assert_equals("#t", interpret('(< 1 2)', env)) assert_equals("#f", interpret('(< 2 2)', env)) assert_equals("#f", interpret('(< 2 1)', env))
def test_less_or_equal(): assert_equals("#t", interpret('(<= 1 2)', env)) assert_equals("#t", interpret('(<= 2 2)', env)) assert_equals("#f", interpret('(<= 2 1)', env))
def test_greater_or_equal(): assert_equals("#f", interpret('(>= 1 2)', env)) assert_equals("#t", interpret('(>= 2 2)', env)) assert_equals("#t", interpret('(>= 2 1)', env))
def test_xor(): assert_equals("#f", interpret('(xor #f #f)', env)) assert_equals("#t", interpret('(xor #t #f)', env)) assert_equals("#t", interpret('(xor #f #t)', env)) assert_equals("#f", interpret('(xor #t #t)', env))
def test_and(): assert_equals("#f", interpret('(and #f #f)', env)) assert_equals("#f", interpret('(and #t #f)', env)) assert_equals("#f", interpret('(and #f #t)', env)) assert_equals("#t", interpret('(and #t #t)', env))
def test_not(): assert_equals("#t", interpret('(not #f)', env)) assert_equals("#f", interpret('(not #t)', env))
def test_sort(): assert_equals("(1 2 3 4 5 6 7)", interpret("(sort '(6 3 7 2 4 1 5))", env)) assert_equals("()", interpret("'()", env))
def test_range(): assert_equals("(1 2 3 4 5)", interpret("(range 1 5)", env)) assert_equals("(1)", interpret("(range 1 1)", env)) assert_equals("()", interpret("(range 2 1)", env))
def test_reverse(): assert_equals("(4 3 2 1)", interpret("(reverse '(1 2 3 4))", env)) assert_equals("()", interpret("(reverse '())", env))
def test_map(): interpret(""" (define inc (lambda (x) (+ 1 x))) """, env) assert_equals("(2 3 4)", interpret("(map inc '(1 2 3))", env))