I'm trying to control the display of large data structures that I'm matching against predicates, but I encounter an error at runtime. Here's a minimal example:
(require '[clojure.test :as t]
'[matcher-combinators.test]
'[matcher-combinators.matchers :as match]
'[matcher-combinators.config :as match-config])
(t/deftest example
(binding [match-config/*use-abbreviation* true]
(t/is (match? {:a list?} {:a (into [] (repeat 400 :a))}))))
This results in the following error:
1. Unhandled java.lang.ClassCastException
class matcher_combinators.printer.EllisionMarker cannot be cast to class
java.lang.Comparable (matcher_combinators.printer.EllisionMarker is in
unnamed module of loader clojure.lang.DynamicClassLoader @2fb209ab;
java.lang.Comparable is in module java.base of loader 'bootstrap')
Util.java: 153 clojure.lang.Util/compare
RT.java: 283 clojure.lang.RT$DefaultComparator/compare
PersistentTreeMap.java: 330 clojure.lang.PersistentTreeMap/doCompare
PersistentTreeMap.java: 343 clojure.lang.PersistentTreeMap/add
PersistentTreeMap.java: 128 clojure.lang.PersistentTreeMap/assoc
PersistentTreeMap.java: 26 clojure.lang.PersistentTreeMap/assoc
RT.java: 827 clojure.lang.RT/assoc
core.clj: 193 clojure.core/assoc
core.clj: 192 clojure.core/assoc
printer.cljc: 89 matcher_combinators.printer$with_ellision_marker/invokeStatic
printer.cljc: 80 matcher_combinators.printer$with_ellision_marker/invoke
core.clj: 2586 clojure.core/comp/fn
printer.cljc: 156 matcher_combinators.printer$pretty_print/invokeStatic
printer.cljc: 152 matcher_combinators.printer$pretty_print/invoke
clj_test.clj: 157 matcher-combinators.clj-test/eval13591/fn
MultiFn.java: 234 clojure.lang.MultiFn/invoke
core.clj: 3676 clojure.core/pr-on
core.clj: 3679 clojure.core/pr
core.clj: 3679 clojure.core/pr
AFn.java: 154 clojure.lang.AFn/applyToHelper
RestFn.java: 132 clojure.lang.RestFn/applyTo
core.clj: 667 clojure.core/apply
core.clj: 3716 clojure.core/prn
core.clj: 3716 clojure.core/prn
RestFn.java: 137 clojure.lang.RestFn/applyTo
core.clj: 667 clojure.core/apply
core.clj: 3735 clojure.core/println
core.clj: 3735 clojure.core/println
RestFn.java: 408 clojure.lang.RestFn/invoke
test.clj: 105 cider.nrepl.middleware.test/print-object/fn
test.clj: 105 cider.nrepl.middleware.test/print-object
test.clj: 93 cider.nrepl.middleware.test/print-object
test.clj: 143 cider.nrepl.middleware.test/test-result
test.clj: 122 cider.nrepl.middleware.test/test-result
test.clj: 204 cider.nrepl.middleware.test/report-final-status/fn
Atom.java: 37 clojure.lang.Atom/swap
core.clj: 2369 clojure.core/swap!
core.clj: 2362 clojure.core/swap!
test.clj: 196 cider.nrepl.middleware.test/report-final-status
test.clj: 190 cider.nrepl.middleware.test/report-final-status
test.clj: 248 cider.nrepl.middleware.test/eval35550/fn
MultiFn.java: 229 clojure.lang.MultiFn/invoke
test.clj: 357 clojure.test/do-report
test.clj: 351 clojure.test/do-report
build_test.clj: 165 site.fabricate.build-test/fn
build_test.clj: 163 site.fabricate.build-test/fn
test.clj: 322 cider.nrepl.middleware.test/test-var/fn
test.clj: 321 cider.nrepl.middleware.test/test-var
test.clj: 311 cider.nrepl.middleware.test/test-var
test.clj: 354 cider.nrepl.middleware.test/test-vars/fn/fn/fn
test.clj: 687 clojure.test/default-fixture
test.clj: 683 clojure.test/default-fixture
test.clj: 353 cider.nrepl.middleware.test/test-vars/fn/fn
PersistentVector.java: 343 clojure.lang.PersistentVector/reduce
core.clj: 6886 clojure.core/reduce
core.clj: 6869 clojure.core/reduce
test.clj: 352 cider.nrepl.middleware.test/test-vars/fn
test.clj: 687 clojure.test/default-fixture
test.clj: 683 clojure.test/default-fixture
test.clj: 350 cider.nrepl.middleware.test/test-vars
test.clj: 340 cider.nrepl.middleware.test/test-vars
test.clj: 376 cider.nrepl.middleware.test/test-ns
test.clj: 362 cider.nrepl.middleware.test/test-ns
test.clj: 395 cider.nrepl.middleware.test/test-var-query/fn
protocols.clj: 49 clojure.core.protocols/iter-reduce
protocols.clj: 75 clojure.core.protocols/fn
protocols.clj: 75 clojure.core.protocols/fn
protocols.clj: 13 clojure.core.protocols/fn/G
core.clj: 6887 clojure.core/reduce
core.clj: 6869 clojure.core/reduce
test.clj: 394 cider.nrepl.middleware.test/test-var-query
test.clj: 382 cider.nrepl.middleware.test/test-var-query
test.clj: 453 cider.nrepl.middleware.test/handle-test-var-query-op/fn/fn
AFn.java: 152 clojure.lang.AFn/applyToHelper
AFn.java: 144 clojure.lang.AFn/applyTo
core.clj: 667 clojure.core/apply
core.clj: 1990 clojure.core/with-bindings*
core.clj: 1990 clojure.core/with-bindings*
RestFn.java: 425 clojure.lang.RestFn/invoke
test.clj: 441 cider.nrepl.middleware.test/handle-test-var-query-op/fn
session.clj: 230 nrepl.middleware.session/session-exec/session-loop
SessionThread.java: 21 nrepl.SessionThread/run
Swapping in vector? for list? in the match predicate does not cause the error. I've tested this against the latest version, 3.10.0.
I'm trying to control the display of large data structures that I'm matching against predicates, but I encounter an error at runtime. Here's a minimal example:
This results in the following error:
Swapping in
vector?forlist?in the match predicate does not cause the error. I've tested this against the latest version,3.10.0.