(define test-1 (lambda () (let ((e '((lambda (x y z) (x y z 1))))) (equal? e (unparse (parse e)))))) (define test-2 (lambda () (let ((e '(lambda (x) 'x))) (equal? e (unparse (parse e)))))) (define test-3 (lambda () (let ((e '(if (let ((x 1)) x) (let* ((x 2)) x) (letrec ((x 3)) x)))) (equal? e (unparse (parse e)))))) (define test-4 (lambda () (let ((e '(lambda (x y) (x a 1 b))) (fv (set 'a 'b))) (set= fv (free-vars (parse e)))))) (define test-5 (lambda () (let ((e '(let ((x y) (y x)) (x y))) (fv (set 'x 'y))) (set= fv (free-vars (parse e)))))) (define test-6 (lambda () (let ((e '(let* ((a b) (b a)) (a b))) (fv (set 'b))) (set= fv (free-vars (parse e)))))) (define test-7 (lambda () (let ((e '(letrec ((s t) (t s)) (s t))) (fv (set))) (set= fv (free-vars (parse e)))))) (define test-8 (lambda () (let ((e '(if (let ((x y) (y x)) (x y)) (let* ((a b) (b a)) (a b)) (letrec ((s t) (t s)) (s t)))) (fv (set 'x 'y 'b))) (set= fv (free-vars (parse e)))))) (define test-9 (lambda () (let ((e '(lambda (x y) (x a y b))) (bv (set 'x 'y))) (set= bv (bound-vars (parse e)))))) (define test-10 (lambda () (let ((e '(if (let ((x y) (y x)) (x y)) (let* ((a b) (b a)) (a b)) (letrec ((s t) (t s)) (s t)))) (bv (set 'x 'y 'a 'b 's 't))) (set= bv (bound-vars (parse e))))))