This commit is contained in:
msyds committed 2026-09-24 05:48:40 -06:00
1 parent 5936ec978b
commit 390fe16d90
5 files changed
+84 -44

No files matched your search

+27 -28
View File
@@ -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)))))