Alex/Rich, if a patch is welcome for this I am happy to raise a ticket and 
submit.

Test case:
(clojure.data/diff {:x {:y 1}} {:x {}})

Expected:
({:x {:y 1}} nil nil)

Actual:
;; => ({:x {:y 1}} {:x nil} nil)

Problem:
There is nothing only in the second input, so the second result should be 
nil.
{:x nil} implies that there is a nil in the second input, which there is 
not.
Furthermore the result cannot distinguish from
(clojure.data/diff {:x {:y 1}} {:x nil})
Which should and does correctly return {:x nil} as the second result.

Affects:
Empty collections in first or second argument

Cause:
clojure.data/diff-associative-key
    [(when (and in-a (or (not (nil? a*)) (not same))) {k a*})
     (when (and in-b (or (not (nil? b*)) (not same))) {k b*})
     (when same {k ab})]
should be
    [(when (and in-a (or (not (nil? a*)) (and (not same) (nil? va)))) {k 
a*})
     (when (and in-b (or (not (nil? b*)) (and (not same) (nil? vb)))) {k 
b*})
     (when same {k ab})]))

Why do I care?:
I use and maintain a modest library to send state changes from Clojure to 
ClojureScript
https://github.com/timothypratley/patchin
In this context, handling empty collections/nils is desirable so the data 
can be treated abstractly.
I have a workaround, so am not affected by the issue, just providing a 
motivating example where knowing the difference is useful.



Regards,
Timothy

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to