;; ------------------------------------------------------------------------ ;; | | ;; | FILE : lexical-address-tests.rkt | ;; | AUTHOR : Eugene Wallingford | ;; | CREATION DATE : 2022/04/05 | ;; | DESCRIPTION : A few Rackunit tests for lexical-address. These | ;; | tests work for the version of the function that | ;; | eliminates variable names and declaration lists. | ;; | | ;; ------------------------------------------------------------------------ #lang racket (require rackunit) (require "lexical-address.rkt") ;; ------------------------------------------------------------------------- (check-equal? (lexical-address 'a) '(: 0 0)) (check-equal? (lexical-address '(if a b c)) '(if (: 0 0) (: 0 1) (: 0 2))) (check-equal? (lexical-address '(lambda (a b c) (if (eq? b c) ((lambda (c) (cons a c)) a) b)) ) '(lambda 3 (if ((: 1 0) (: 0 1) (: 0 2)) ((lambda 1 ((: 2 1) (: 1 0) (: 0 0))) (: 0 0)) (: 0 1)))) (check-equal? (lexical-address '(lambda (f) ((lambda (h) (lambda (n) ((f (h h)) n))) (lambda (h) (lambda (n) ((f (h h)) n)))))) '(lambda 1 ((lambda 1 (lambda 1 (((: 2 0) ((: 1 0) (: 1 0))) (: 0 0)))) (lambda 1 (lambda 1 (((: 2 0) ((: 1 0) (: 1 0))) (: 0 0))))))) ;; -------------------------------------------------------------------------