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

Reply via email to