Example #1
0
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
Example #2
0
def test_multiply():
    source = ['(* 1 3 5)']
    exp = parse_tokens(tokenize(source))[0]
    assert eval_in_env(exp, []) == 15
Example #3
0
def test_or_false():
    source = ['(or (> 2 10) (= 1 2) #f)']
    exp = parse_tokens(tokenize(source))[0]
    assert eval_in_env(exp, []) == False
Example #4
0
def test_and_false():
    source = ['(and (> 2 1) (= 1 2) #t)']
    exp = parse_tokens(tokenize(source))[0]
    assert eval_in_env(exp, []) == False
Example #5
0
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
Example #6
0
def test_eval_let():
    exp = ['let', [['x', 3], ['y', 10]], ['+', 'x', 'y']]
    assert eval_in_env(exp, []) == 13
Example #7
0
def test_nullcheck_3():
    source = ['(null? (cdr (list 1)))']
    exp = parse_tokens(tokenize(source))[0]
    assert eval_in_env(exp, []) == True
Example #8
0
def test_nullcheck():
    source = ['(null? null)']
    exp = parse_tokens(tokenize(source))[0]
    assert eval_in_env(exp, []) == True
Example #9
0
def test_eval_anon():
    exp = [['lambda', ['x'], ['+', 'x', 'x']], 7]
    assert eval_in_env(exp, []) == 14
Example #10
0
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
Example #11
0
def test_eval_add_const():
    exp = ['+', 3, 4]
    res = eval_in_env(exp, [])
    assert res == 7
Example #12
0
def test_eval_closure_2():
    env = [('ifthen', ['closure', ['lambda', ['x'], ['if', True, 'x', 3]], []])]
    exp = ['ifthen', 10]
    assert eval_in_env(exp, env) == 10
Example #13
0
def test_eval_closure():
    env = [('add3', ['closure', ['lambda', ['x'], ['+', 'x', 3]], []])]
    exp = ['add3', 10]
    assert eval_in_env(exp, env) == 13
Example #14
0
def test_eval_define():
    env = []
    exp = ['define', 'a', 3]
    eval_in_env(exp, env)
    assert env == [('a', 3)]
Example #15
0
def test_cdr():
    source = ['(cdr (cons 1 null))']
    exp = parse_tokens(tokenize(source))[0]
    assert eval_in_env(exp, []) == []
Example #16
0
def test_subtract():
    source = ['(- 10 14)']
    exp = parse_tokens(tokenize(source))[0]
    assert eval_in_env(exp, []) == -4
Example #17
0
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]
Example #18
0
def test_divide():
    source = ['(/ 10 3)']
    exp = parse_tokens(tokenize(source))[0]
    assert eval_in_env(exp, []) == 3
Example #19
0
def test_nullcheck_2():
    source = ['(null? (cons 1 null))']
    exp = parse_tokens(tokenize(source))[0]
    assert eval_in_env(exp, []) == False
Example #20
0
def test_add():
    source = ['(+ 1 3 5)']
    exp = parse_tokens(tokenize(source))[0]
    assert eval_in_env(exp, []) == 9
Example #21
0
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]
Example #22
0
def test_eval_if():
    exp = ['if', True, 3, 4]
    assert eval_in_env(exp, []) == 3