def test_eval_recursion(): env = [('sumto', ['closure', ['lambda', ['n'], ['if', ['<', 'n', 1], 0, ['+', 'n', ['sumto', ['-', 'n', 1]]]]], []])] exp = ['sumto', 3] assert eval_in_env(exp, env) == 6
def test_multiply(): source = ['(* 1 3 5)'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == 15
def test_or_false(): source = ['(or (> 2 10) (= 1 2) #f)'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == False
def test_and_false(): source = ['(and (> 2 1) (= 1 2) #t)'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == False
def test_gt(): source0, source1 = ['(> 2 2)'], ['(> 3 2)'] exp0 = parse_tokens(tokenize(source0))[0] exp1 = parse_tokens(tokenize(source1))[0] assert eval_in_env(exp0, []) == False assert eval_in_env(exp1, []) == True
def test_eval_let(): exp = ['let', [['x', 3], ['y', 10]], ['+', 'x', 'y']] assert eval_in_env(exp, []) == 13
def test_nullcheck_3(): source = ['(null? (cdr (list 1)))'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == True
def test_nullcheck(): source = ['(null? null)'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == True
def test_eval_anon(): exp = [['lambda', ['x'], ['+', 'x', 'x']], 7] assert eval_in_env(exp, []) == 14
def test_eval_recursion_2(): env = [('factorial', ['closure', ['lambda', ['n'], ['if', ['<', 'n', 1], 1, ['*', 'n', ['factorial', ['-', 'n', 1]]]]], []])] exp = ['factorial', 5] assert eval_in_env(exp, env) == 120
def test_eval_add_const(): exp = ['+', 3, 4] res = eval_in_env(exp, []) assert res == 7
def test_eval_closure_2(): env = [('ifthen', ['closure', ['lambda', ['x'], ['if', True, 'x', 3]], []])] exp = ['ifthen', 10] assert eval_in_env(exp, env) == 10
def test_eval_closure(): env = [('add3', ['closure', ['lambda', ['x'], ['+', 'x', 3]], []])] exp = ['add3', 10] assert eval_in_env(exp, env) == 13
def test_eval_define(): env = [] exp = ['define', 'a', 3] eval_in_env(exp, env) assert env == [('a', 3)]
def test_cdr(): source = ['(cdr (cons 1 null))'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == []
def test_subtract(): source = ['(- 10 14)'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == -4
def test_list(): source = ['(list 1 2 (+ 1 2) 4)'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == [1, 2, 3, 4]
def test_divide(): source = ['(/ 10 3)'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == 3
def test_nullcheck_2(): source = ['(null? (cons 1 null))'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == False
def test_add(): source = ['(+ 1 3 5)'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == 9
def test_cons_2(): source = ['(cons (+ 1 3 5) (cons (+ 1 3 5) null))'] exp = parse_tokens(tokenize(source))[0] assert eval_in_env(exp, []) == [9, 9]
def test_eval_if(): exp = ['if', True, 3, 4] assert eval_in_env(exp, []) == 3