That error message is coming from some use of (case), usually in your
code but conceivably from somewhere in Clojure. It tries to do some
clever bit-fiddling to generate a constant-time-dispatch on the
hashcodes of its clauses, and if that fails it throws a compiler error
(arguably it could degrade into to a cond, but it doesn't).

Given that you don't use case at all, and the backtrace suggests the
case call is in dispatching for the protocol, it sounds to me like a
bug in the protocol dispatcher.

The "interesting" exception usually comes after the last "caused by"
message, and the first few frames are the ones that actually caused
the issue. So here's yours:

Caused by: java.lang.IllegalArgumentException: No distinct mapping
found
 at clojure.core$min_hash.invoke (core.clj:5270)
    clojure.core$expand_method_impl_cache.invoke (core_deftype.clj:
403)
    clojure.core$_cache_protocol_fn.invoke (core_deftype.clj:472)
funql.core$eval293$fn__294$G__284__309.invoke (core.clj:408)
funql.core$eval324$fn__325$fn__328.invoke (core.clj:432)
    clojure.lang.LazySeq.sval (LazySeq.java:42)
    clojure.lang.LazySeq.seq (LazySeq.java:63)
    clojure.lang.RT.seq (RT.java:450)
    clojure.core$seq.invoke (core.clj:122)

So line 432 calls iseq, and the macroexpansion of your code at line
408 calls into some kind of internal protocol-dispatch-cache, which
tries to do a minhash in order to figure out how to switch through a
case block, which barfs.

On Mar 25, 5:15 pm, Tassilo Horn <tass...@member.fsf.org> wrote:
> Hi all,
>
> in my graph querying library, I had several defmultis that simply
> dispatched on the class of the first argument.  The guys on #clojure
> suggested using protocols instead to get a better performance.  So I
> did, and basically it works fine and seems to be a bit faster than
> before.
>
> However, when running my tests (lein test) I get errors.  Most of the
> time my coupling-by-objects test errors, but sometimes it's another
> test.  And some other times, all tests pass without error.  (The same
> applies for running the tests at the REPL, or simply executing the forms
> contained in my tests.)
>
> A complete backtrace is below.  I have no clue what it should tell me.
> I checked all the shown line numbers in my own code (funql), but I
> cannot see how these places might produce an error.
>
> I switched off AOT, deleted all compiled class files, but that doesn't
> change anything.  I run clojure 1.2.0.  I've tried the current 1.3.0
> master snapshot, but that fails exactly the same.
>
> If someone wants to try it out for himself, you can clone my mercurial
> repository:
>
>   $ hg clonehttps://anonymous:sec...@hg.uni-koblenz.de/horn/funql
>   $ lein deps
>   $ lein test
>
> Any pointers are highly welcome.  I owe a beer to whoever finds the bug
> or gives me a pointer that helps finding it!
>
> Bye,
> Tassilo, who stared the last 3 hours at the code without any luck...
>
> ERROR in (test-reachable-vertices) (LazySeq.java:47)
> expected: (= 6117 (count (p-apply (vertex (jg) 12) [p-* <->])))
>   actual: java.lang.RuntimeException: java.lang.RuntimeException: 
> java.lang.RuntimeException: java.lang.IllegalArgumentException: No distinct 
> mapping found
>  at clojure.lang.LazySeq.sval (LazySeq.java:47)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.ChunkedCons.chunkedNext (ChunkedCons.java:59)
>     clojure.core$chunk_next.invoke (core.clj:582)
>     clojure.core$r.invoke (core.clj:798)
>     clojure.core$into.invoke (core.clj:2615)
>     funql.core$into_oset.doInvoke (core.clj:81)
>     clojure.lang.RestFn.applyTo (RestFn.java:140)
>     clojure.core$apply.invoke (core.clj:540)
>     funql.core$___.invoke (core.clj:476)
>     funql.core$_LT___GT_.invoke (core.clj:527)
>     funql.core$_LT___GT_.invoke (core.clj:523)
>     funql.core$p_apply.invoke (core.clj:453)
>     funql.core$p__PLUS_.invoke (core.clj:601)
>     funql.core$p__STAR_.invoke (core.clj:616)
>     clojure.lang.AFn.applyToHelper (AFn.java:165)
>     clojure.lang.AFn.applyTo (AFn.java:151)
>     clojure.core$apply.invoke (core.clj:542)
>     funql.core$p_apply.invoke (core.clj:455)
>     funql.test.core$fn__792$fn__805.invoke (core.clj:263)
>     funql.test.core/fn (core.clj:263)
>     clojure.test$test_var$fn__6131.invoke (test.clj:688)
>     clojure.test$test_var.invoke (test.clj:688)
>     clojure.test$test_all_vars$fn__6135$fn__6142.invoke (test.clj:704)
>     clojure.test$default_fixture.invoke (test.clj:658)
>     clojure.test$test_all_vars$fn__6135.invoke (test.clj:704)
>     clojure.test$default_fixture.invoke (test.clj:658)
>     clojure.test$test_all_vars.invoke (test.clj:700)
>     clojure.test$test_ns.invoke (test.clj:723)
>     clojure.core$map$fn__3695.invoke (core.clj:2096)
>     clojure.lang.LazySeq.sval (LazySeq.java:42)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.Cons.next (Cons.java:39)
>     clojure.lang.RT.boundedLength (RT.java:1186)
>     clojure.lang.RestFn.applyTo (RestFn.java:131)
>     clojure.core$apply.invoke (core.clj:542)
>     clojure.test$run_tests.doInvoke (test.clj:738)
>     clojure.lang.RestFn.applyTo (RestFn.java:138)
>     clojure.core$apply.invoke (core.clj:540)
>     user$eval1350$fn__1351.invoke (NO_SOURCE_FILE:1)
>     user$eval1350.invoke (NO_SOURCE_FILE:1)
>     clojure.lang.Compiler.eval (Compiler.java:5424)
>     clojure.lang.Compiler.eval (Compiler.java:5415)
>     clojure.lang.Compiler.eval (Compiler.java:5415)
>     clojure.lang.Compiler.eval (Compiler.java:5391)
>     clojure.core$eval.invoke (core.clj:2382)
>     clojure.main$eval_opt.invoke (main.clj:235)
>     clojure.main$initialize.invoke (main.clj:254)
>     clojure.main$null_opt.invoke (main.clj:279)
>     clojure.main$main.doInvoke (main.clj:354)
>     clojure.lang.RestFn.invoke (RestFn.java:422)
>     clojure.lang.Var.invoke (Var.java:369)
>     clojure.lang.AFn.applyToHelper (AFn.java:165)
>     clojure.lang.Var.applyTo (Var.java:482)
>     clojure.main.main (main.java:37)
> Caused by: java.lang.RuntimeException: java.lang.RuntimeException: 
> java.lang.IllegalArgumentException: No distinct mapping found
>  at clojure.lang.LazySeq.sval (LazySeq.java:47)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.RT.seq (RT.java:450)
>     clojure.core$seq.invoke (core.clj:122)
>     clojure.core$map$fn__3695.invoke (core.clj:2088)
>     clojure.lang.LazySeq.sval (LazySeq.java:42)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.ChunkedCons.chunkedNext (ChunkedCons.java:59)
>     clojure.core$chunk_next.invoke (core.clj:582)
>     clojure.core$r.invoke (core.clj:798)
>     clojure.core$into.invoke (core.clj:2615)
>     funql.core$into_oset.doInvoke (core.clj:81)
>     clojure.lang.RestFn.applyTo (RestFn.java:140)
>     clojure.core$apply.invoke (core.clj:540)
>     funql.core$___.invoke (core.clj:476)
>     funql.core$_LT___GT_.invoke (core.clj:527)
>     funql.core$_LT___GT_.invoke (core.clj:523)
>     funql.core$p_apply.invoke (core.clj:453)
>     funql.core$p__PLUS_.invoke (core.clj:601)
>     funql.core$p__STAR_.invoke (core.clj:616)
>     clojure.lang.AFn.applyToHelper (AFn.java:165)
>     clojure.lang.AFn.applyTo (AFn.java:151)
>     clojure.core$apply.invoke (core.clj:542)
>     funql.core$p_apply.invoke (core.clj:455)
>     funql.test.core$fn__792$fn__805.invoke (core.clj:263)
>     funql.test.core/fn (core.clj:263)
>     clojure.test$test_var$fn__6131.invoke (test.clj:688)
>     clojure.test$test_var.invoke (test.clj:688)
>     clojure.test$test_all_vars$fn__6135$fn__6142.invoke (test.clj:704)
>     clojure.test$default_fixture.invoke (test.clj:658)
>     clojure.test$test_all_vars$fn__6135.invoke (test.clj:704)
>     clojure.test$default_fixture.invoke (test.clj:658)
>     clojure.test$test_all_vars.invoke (test.clj:700)
>     clojure.test$test_ns.invoke (test.clj:723)
>     clojure.core$map$fn__3695.invoke (core.clj:2096)
>     clojure.lang.LazySeq.sval (LazySeq.java:42)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.Cons.next (Cons.java:39)
>     clojure.lang.RT.boundedLength (RT.java:1186)
>     clojure.lang.RestFn.applyTo (RestFn.java:131)
>     clojure.core$apply.invoke (core.clj:542)
>     clojure.test$run_tests.doInvoke (test.clj:738)
>     clojure.lang.RestFn.applyTo (RestFn.java:138)
>     clojure.core$apply.invoke (core.clj:540)
>     user$eval1350$fn__1351.invoke (NO_SOURCE_FILE:1)
>     user$eval1350.invoke (NO_SOURCE_FILE:1)
>     clojure.lang.Compiler.eval (Compiler.java:5424)
>     clojure.lang.Compiler.eval (Compiler.java:5415)
>     clojure.lang.Compiler.eval (Compiler.java:5415)
>     clojure.lang.Compiler.eval (Compiler.java:5391)
>     clojure.core$eval.invoke (core.clj:2382)
>     clojure.main$eval_opt.invoke (main.clj:235)
>     clojure.main$initialize.invoke (main.clj:254)
>     clojure.main$null_opt.invoke (main.clj:279)
>     clojure.main$main.doInvoke (main.clj:354)
>     clojure.lang.RestFn.invoke (RestFn.java:422)
>     clojure.lang.Var.invoke (Var.java:369)
>     clojure.lang.AFn.applyToHelper (AFn.java:165)
>     clojure.lang.Var.applyTo (Var.java:482)
>     clojure.main.main (main.java:37)
> Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: No 
> distinct mapping found
>  at clojure.lang.LazySeq.sval (LazySeq.java:47)
>     clojure.lang.LazySeq.seq (LazySeq.java:63)
>     clojure.lang.RT.seq (RT.java:450)
>     clojure.core$seq.invoke (core.clj:122)
>     clojure.core$filter$fn__3714.invoke (core.clj:2130)
>     clojure.lang.LazySeq.sval (LazySeq.java:42)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.RT.seq (RT.java:450)
>     clojure.core$seq.invoke (core.clj:122)
>     clojure.core$map$fn__3695.invoke (core.clj:2088)
>     clojure.lang.LazySeq.sval (LazySeq.java:42)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.ChunkedCons.chunkedNext (ChunkedCons.java:59)
>     clojure.core$chunk_next.invoke (core.clj:582)
>     clojure.core$r.invoke (core.clj:798)
>     clojure.core$into.invoke (core.clj:2615)
>     funql.core$into_oset.doInvoke (core.clj:81)
>     clojure.lang.RestFn.applyTo (RestFn.java:140)
>     clojure.core$apply.invoke (core.clj:540)
>     funql.core$___.invoke (core.clj:476)
>     funql.core$_LT___GT_.invoke (core.clj:527)
>     funql.core$_LT___GT_.invoke (core.clj:523)
>     funql.core$p_apply.invoke (core.clj:453)
>     funql.core$p__PLUS_.invoke (core.clj:601)
>     funql.core$p__STAR_.invoke (core.clj:616)
>     clojure.lang.AFn.applyToHelper (AFn.java:165)
>     clojure.lang.AFn.applyTo (AFn.java:151)
>     clojure.core$apply.invoke (core.clj:542)
>     funql.core$p_apply.invoke (core.clj:455)
>     funql.test.core$fn__792$fn__805.invoke (core.clj:263)
>     funql.test.core/fn (core.clj:263)
>     clojure.test$test_var$fn__6131.invoke (test.clj:688)
>     clojure.test$test_var.invoke (test.clj:688)
>     clojure.test$test_all_vars$fn__6135$fn__6142.invoke (test.clj:704)
>     clojure.test$default_fixture.invoke (test.clj:658)
>     clojure.test$test_all_vars$fn__6135.invoke (test.clj:704)
>     clojure.test$default_fixture.invoke (test.clj:658)
>     clojure.test$test_all_vars.invoke (test.clj:700)
>     clojure.test$test_ns.invoke (test.clj:723)
>     clojure.core$map$fn__3695.invoke (core.clj:2096)
>     clojure.lang.LazySeq.sval (LazySeq.java:42)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.Cons.next (Cons.java:39)
>     clojure.lang.RT.boundedLength (RT.java:1186)
>     clojure.lang.RestFn.applyTo (RestFn.java:131)
>     clojure.core$apply.invoke (core.clj:542)
>     clojure.test$run_tests.doInvoke (test.clj:738)
>     clojure.lang.RestFn.applyTo (RestFn.java:138)
>     clojure.core$apply.invoke (core.clj:540)
>     user$eval1350$fn__1351.invoke (NO_SOURCE_FILE:1)
>     user$eval1350.invoke (NO_SOURCE_FILE:1)
>     clojure.lang.Compiler.eval (Compiler.java:5424)
>     clojure.lang.Compiler.eval (Compiler.java:5415)
>     clojure.lang.Compiler.eval (Compiler.java:5415)
>     clojure.lang.Compiler.eval (Compiler.java:5391)
>     clojure.core$eval.invoke (core.clj:2382)
>     clojure.main$eval_opt.invoke (main.clj:235)
>     clojure.main$initialize.invoke (main.clj:254)
>     clojure.main$null_opt.invoke (main.clj:279)
>     clojure.main$main.doInvoke (main.clj:354)
>     clojure.lang.RestFn.invoke (RestFn.java:422)
>     clojure.lang.Var.invoke (Var.java:369)
>     clojure.lang.AFn.applyToHelper (AFn.java:165)
>     clojure.lang.Var.applyTo (Var.java:482)
>     clojure.main.main (main.java:37)
> Caused by: java.lang.IllegalArgumentException: No distinct mapping found
>  at clojure.core$min_hash.invoke (core.clj:5270)
>     clojure.core$expand_method_impl_cache.invoke (core_deftype.clj:403)
>     clojure.core$_cache_protocol_fn.invoke (core_deftype.clj:472)
>     funql.core$eval293$fn__294$G__284__309.invoke (core.clj:408)
>     funql.core$eval324$fn__325$fn__328.invoke (core.clj:432)
>     clojure.lang.LazySeq.sval (LazySeq.java:42)
>     clojure.lang.LazySeq.seq (LazySeq.java:63)
>     clojure.lang.RT.seq (RT.java:450)
>     clojure.core$seq.invoke (core.clj:122)
>     clojure.core$filter$fn__3714.invoke (core.clj:2130)
>     clojure.lang.LazySeq.sval (LazySeq.java:42)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.RT.seq (RT.java:450)
>     clojure.core$seq.invoke (core.clj:122)
>     clojure.core$map$fn__3695.invoke (core.clj:2088)
>     clojure.lang.LazySeq.sval (LazySeq.java:42)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.ChunkedCons.chunkedNext (ChunkedCons.java:59)
>     clojure.core$chunk_next.invoke (core.clj:582)
>     clojure.core$r.invoke (core.clj:798)
>     clojure.core$into.invoke (core.clj:2615)
>     funql.core$into_oset.doInvoke (core.clj:81)
>     clojure.lang.RestFn.applyTo (RestFn.java:140)
>     clojure.core$apply.invoke (core.clj:540)
>     funql.core$___.invoke (core.clj:476)
>     funql.core$_LT___GT_.invoke (core.clj:527)
>     funql.core$_LT___GT_.invoke (core.clj:523)
>     funql.core$p_apply.invoke (core.clj:453)
>     funql.core$p__PLUS_.invoke (core.clj:601)
>     funql.core$p__STAR_.invoke (core.clj:616)
>     clojure.lang.AFn.applyToHelper (AFn.java:165)
>     clojure.lang.AFn.applyTo (AFn.java:151)
>     clojure.core$apply.invoke (core.clj:542)
>     funql.core$p_apply.invoke (core.clj:455)
>     funql.test.core$fn__792$fn__805.invoke (core.clj:263)
>     funql.test.core/fn (core.clj:263)
>     clojure.test$test_var$fn__6131.invoke (test.clj:688)
>     clojure.test$test_var.invoke (test.clj:688)
>     clojure.test$test_all_vars$fn__6135$fn__6142.invoke (test.clj:704)
>     clojure.test$default_fixture.invoke (test.clj:658)
>     clojure.test$test_all_vars$fn__6135.invoke (test.clj:704)
>     clojure.test$default_fixture.invoke (test.clj:658)
>     clojure.test$test_all_vars.invoke (test.clj:700)
>     clojure.test$test_ns.invoke (test.clj:723)
>     clojure.core$map$fn__3695.invoke (core.clj:2096)
>     clojure.lang.LazySeq.sval (LazySeq.java:42)
>     clojure.lang.LazySeq.seq (LazySeq.java:56)
>     clojure.lang.Cons.next (Cons.java:39)
>     clojure.lang.RT.boundedLength (RT.java:1186)
>     clojure.lang.RestFn.applyTo (RestFn.java:131)
>     clojure.core$apply.invoke (core.clj:542)
>     clojure.test$run_tests.doInvoke (test.clj:738)
>     clojure.lang.RestFn.applyTo (RestFn.java:138)
>     clojure.core$apply.invoke (core.clj:540)
>     user$eval1350$fn__1351.invoke (NO_SOURCE_FILE:1)
>     user$eval1350.invoke (NO_SOURCE_FILE:1)
>     clojure.lang.Compiler.eval (Compiler.java:5424)
>     clojure.lang.Compiler.eval (Compiler.java:5415)
>     clojure.lang.Compiler.eval (Compiler.java:5415)
>     clojure.lang.Compiler.eval (Compiler.java:5391)
>     clojure.core$eval.invoke (core.clj:2382)
>     clojure.main$eval_opt.invoke (main.clj:235)
>     clojure.main$initialize.invoke (main.clj:254)
>     clojure.main$null_opt.invoke (main.clj:279)
>     clojure.main$main.doInvoke (main.clj:354)
>     clojure.lang.RestFn.invoke (RestFn.java:422)
>     clojure.lang.Var.invoke (Var.java:369)
>     clojure.lang.AFn.applyToHelper (AFn.java:165)
>     clojure.lang.Var.applyTo (Var.java:482)
>     clojure.main.main (main.java:37)

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to