This commit is contained in:
msyds committed 2026-09-24 00:01:49 -06:00
1 parent a2b73e761b
commit 5936ec978b
4 files changed
+108 -36

No files matched your search

+34 -12
View File
@@ -1,23 +1,45 @@
(ns expand.syntax-rules-test
(:require [expand.syntax-rules :as sut]
[clojure.test :as t]))
[clojure.core.match :refer [match]]
[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)}
(sut/unify 'x '(1 2 3))))
(unify 'x '(1 2 3))))
(t/is (= '{x 1 y 2}
(sut/unify '(x y)
'(1 2))))
(unify '(x y) '(1 2))))
(t/is (= '{x [:ellipsis (1 2 3 4)]}
(sut/unify '(x ...)
'(1 2 3 4))))
(unify '(x ...) '(1 2 3 4))))
(t/is (= '{x [:ellipsis (1 3)]
y [:ellipsis (2 4)]}
(sut/unify '((x y) ...)
'((1 2) (3 4)))))
(unify '((x y) ...) '((1 2) (3 4)))))
(t/is (= nil
(sut/unify '(x y z)
'(1 2))))
(unify '(x y z) '(1 2))))
(t/is (= nil
(sut/unify '((x y) ...)
'((1 2) (1 2 3))))))
(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) ...)
'((1 2) (3 4))))))