summaryrefslogtreecommitdiff
path: root/tests/test_expander.py
blob: 3e32d2c0adc06c677a885d6b915aecb45802c704 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import actinide

def test_known_expansion():
    s = actinide.Session()
    s.run('''
        (begin
            (define-macro (let-one binding body)
                (begin
                    (define name (head binding))
                    (define val (head (tail binding)))
                    `((lambda (,name) ,body) ,val))))
    ''')
    program = s.read('(let-one (x 1) x)')
    assert s.symbol('x') not in s.environment
    assert (1,) == s.eval(program)

def test_quasiquote_expansion():
    s = actinide.Session()

    program = s.read('`(a ,b c)`')
    expansion = s.expand(program)
    assert s.read("(cons 'a (cons b (cons 'c ())))") == expansion

def test_nested_qq_expansion():
    s = actinide.Session()

    program = s.read('`((,a))`')
    expansion = s.expand(program)
    assert s.read("(cons (cons a ()) ())") == expansion

def test_shorter_qq_expansion():
    s = actinide.Session()

    program = s.read('`(,a b)`')
    expansion = s.expand(program)
    assert s.read("(cons a (cons 'b ()))") == expansion