(ns unhygienic-test (:require [unhygienic :as sut] [clojure.test :as t])) (t/deftest unify-test (t/are [result pattern datum] (= result (sut/unify pattern datum)) {'a 123 'b 456} '(a b) '(123 456) nil '(a b) 123 '{b [:ellipsis ([:ellipsis (1 2)] [:ellipsis (3 4)])]} '((b ...) ...) '((1 2) (3 4)) {} '_ 123) (t/testing "non-matches" (t/are [pattern datum] (= nil (sut/unify pattern datum)) '(a b c) '(1 2) '(a b c) '(1 2)))) (t/deftest transcribe-test (t/are [result datum pattern template] (= result (sut/transcribe (sut/unify pattern datum) template)) '(1 a 2 b) '((1 2) (a b)) '((x y) ...) '(x ... y ...) '(1 2 3 4) '(1 2 3 4) '(x ...) '(x ...) '(concat (1 2) (3 4) (5 6)) '((1 2) (3 4) (5 6)) '((a ...) ...) '(concat (a ...) ...)))