(ns expand-test (:require [expand :as sut] [clojure.test :as t])) (t/deftest nearest-test (t/is (= '#{#{a b}} (sut/nearest '#{a b c} '[#{a} #{a b} #{a d}])) "unambiguous") (t/is (= '#{#{a b} #{a c}} (sut/nearest '#{a b c} '[#{a} #{a b} #{a c}])) "ambiguous") (t/is (= #{} (sut/nearest '#{a b c} '[#{d} #{d e} #{f}])) "undefined")) (t/deftest lookup-test (t/is (= [:primitive 'lambda] (sut/lookup #scm/stx [lambda #{}] {[:global 'lambda] [:primitive 'lambda]} {['lambda #{}] [:global 'lambda]}))) (t/is (= [:primitive 'lambda] (sut/lookup #scm/stx [lambda #{a b c}] {[:global 'lambda] [:primitive 'lambda]} {['lambda #{}] [:global 'lambda]}))) (t/is (= [:var] (sut/lookup #scm/stx [x #{a b c}] '{[:lexical x A] [:var] [:lexical x B] [:primitive lambda]} '{[x #{a b}] [:lexical x A] [x #{a}] [:lexical x B]}))))