Skip to content

matcher-combinators.config/*use-abbreviation* throws error when actual doesn't match #234

@respatialized

Description

@respatialized

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions