Exemplo n.º 1
0
def test_quasiquote():
    assert lsp("`(+ 1 2)") == lsp("'(+ 1 2)")

    loc = Env({'x': 2}, parent=top)
    assert lsp("(eval `(+ 1 ~x))", env=loc) == 3

    loc = Env({'x': [3, 4]}, parent=top)
    assert lsp("`(+ 1 2 ~@x)", env=loc) == read("(+ 1 2 3 4)")
Exemplo n.º 2
0
def test_fn():
    assert lsp('((fn () 1))') == 1
    assert lsp('((fn (x) x) 1)') == 1
    assert lsp('((fn (x) (+ x 1)) 1)') == 2

    assert read('(fn (x & xs) xs)') == \
        List(['fn', List(['x', '&', 'xs']), 'xs'])
    assert lsp('((fn (x & xs) xs) 1 2 3 4)') == List([2, 3, 4])
Exemplo n.º 3
0
def test_read_quote():
    assert read("'x") == read('(quote x)')

    assert read("'(1 2)") == read("(quote (1 2))")
    assert read("'((1 2))") == read("(quote ((1 2)))")
    assert read("'((1 2) (3 4))") == read("(quote ((1 2) (3 4)))")

    assert read("(= '1 '(2 3))") == read("(= (quote 1) (quote (2 3)))")
    assert read("(= '(1 2) '3)") == read("(= (quote (1 2)) (quote 3))")
Exemplo n.º 4
0
def test_repr():
    assert str(read('1')) == '1'
    assert str(read('"hello"')) == '"hello"'
    assert str(read('(1 2 3)')) == '(1 2 3)'
Exemplo n.º 5
0
def test_read_func():
    assert read('(+ 1 2)') == List(['+', 1, 2])
    assert read('(fn (x) (+ x 1))') == \
        List(['fn', List(['x']), List(['+', 'x', 1])])
Exemplo n.º 6
0
def test_do():
    assert eval(read('(do 1 2)')) == 2
Exemplo n.º 7
0
def lsp(source, env=top):
    return eval(read('(do {0})'.format(source)), env=env)