31 lines
832 B
Clojure
31 lines
832 B
Clojure
(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 ...) ...)))
|