(ns expand-test (:require [expand :as sut] [clojure.test :as t] [clojure.spec.alpha :as s])) (t/deftest scheme-base-env-test (t/is (s/valid? ::sut/environment sut/scheme-base-env))) (t/deftest symtable-for-env-test (t/is (s/valid? ::sut/symtable (sut/symtable-for-env sut/scheme-base-env)))) (t/deftest nearest-test (t/is (= [:primitive 'lambda] (sut/lookup ['lambda #{}] sut/scheme-base-env (sut/symtable-for-env sut/scheme-base-env)))) (t/is (= [#{0 1}] (sut/nearest ['x #{0 1 2}] [#{0} #{0 1} #{0 3}])))) (t/deftest expand-test (t/testing "unbound symbol" (t/is (thrown? Exception (sut/expand 'x)))) (t/testing "identity fn" (t/is (= '(lambda (x) x) (sut/expand '(λ (x) x))))))