This commit is contained in:
1 parent
5936ec978b
commit
390fe16d90
5 files changed
+84
-44
No files matched your search
@@ -4,42 +4,41 @@
|
||||
[clojure.test :as t]
|
||||
[clojure.walk :as walk]))
|
||||
|
||||
(defn- unify [pattern datum]
|
||||
(some-> (sut/unify (scm/datum->syntax-recursive pattern)
|
||||
(scm/datum->syntax-recursive datum))
|
||||
(update-vals
|
||||
(fn [unif]
|
||||
(walk/prewalk
|
||||
#(if (scm/syntax? %)
|
||||
(scm/syntax-e %)
|
||||
%)
|
||||
unif)))))
|
||||
|
||||
(t/deftest unify-test
|
||||
(t/is (= '{x (1 2 3)}
|
||||
(unify 'x '(1 2 3))))
|
||||
(sut/unify* 'x '(1 2 3))))
|
||||
(t/is (= '{x 1 y 2}
|
||||
(unify '(x y) '(1 2))))
|
||||
(sut/unify* '(x y) '(1 2))))
|
||||
(t/is (= '{x [:ellipsis (1 2 3 4)]}
|
||||
(unify '(x ...) '(1 2 3 4))))
|
||||
(sut/unify* '(x ...) '(1 2 3 4))))
|
||||
(t/is (= '{x [:ellipsis (1 3)]
|
||||
y [:ellipsis (2 4)]}
|
||||
(unify '((x y) ...) '((1 2) (3 4)))))
|
||||
(sut/unify* '((x y) ...) '((1 2) (3 4)))))
|
||||
(t/is (= nil
|
||||
(unify '(x y z) '(1 2))))
|
||||
(sut/unify* '(x y z) '(1 2))))
|
||||
(t/is (= nil
|
||||
(unify '((x y) ...)
|
||||
(sut/unify* '(x y) '(1 2 3))))
|
||||
(t/is (= nil
|
||||
(sut/unify* '((x y) ...)
|
||||
'((1 2) (1 2 3)))))
|
||||
(t/is (= '{x (1 2 3)}
|
||||
(unify 'x '(1 2 3))))
|
||||
(t/is (= {'x [:ellipsis '(1 2 3)]}
|
||||
(unify '(x ...) '(1 2 3))))
|
||||
(t/is (= {'x 1
|
||||
'y [:ellipsis '(2 3)]}
|
||||
(unify '(x y ...) '(1 2 3))))
|
||||
(t/is (= {'x 1 'y 2}
|
||||
(unify '(x y) '(1 2))))
|
||||
(t/is (= {'x [:ellipsis '(1 3)]
|
||||
'y [:ellipsis '(2 4)]}
|
||||
(unify '((x y) ...)
|
||||
(sut/unify* 'x '(1 2 3))))
|
||||
(t/is (= '{x [:ellipsis (1 2 3)]}
|
||||
(sut/unify* '(x ...) '(1 2 3))))
|
||||
(t/is (= '{x 1
|
||||
y [:ellipsis (2 3)]}
|
||||
(sut/unify* '(x y ...) '(1 2 3))))
|
||||
(t/is (= '{x 1 y 2}
|
||||
(sut/unify* '(x y) '(1 2))))
|
||||
(t/is (= '{x [:ellipsis (1 3)]
|
||||
y [:ellipsis (2 4)]}
|
||||
(sut/unify* '((x y) ...)
|
||||
'((1 2) (3 4))))))
|
||||
|
||||
(t/deftest transcribe-test
|
||||
(t/is (= 123
|
||||
(sut/transcribe* 'x 'x 123)))
|
||||
(t/is (= 4
|
||||
(sut/transcribe* 'x '(x y) '(4 5))))
|
||||
(t/is (= '(3 2 1)
|
||||
(sut/transcribe* '(z y x) '(x y z) '(1 2 3)))))
|
||||
Reference in new issue
Block a user