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 clone https://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