Hi Austin, I'm not sure that this is related but I've had an issue with Dates in sets and saw somewhat similar behavior to what you're describing. Context:
https://github.com/ddellacosta/date-hash-bug DD (2014/05/21 10:56), Austin Haas wrote: > Unfortunately, no, but not from lack of trying. > > The best lead I've got thus far is that there is a disj call that > returns a defective set, which returns a positive value for count, but > does not seem to contain any elements. > > I've tried to capture the offending values, but I can't reproduce the > bug with them. I can't arrange the elements of the set to be in the same > order, and I can't get the same hash values for the maps (which contain > js objects). > > I suspect the issue may have something to do with hash collisions. The > app state is being shuffled with some randomness, and the problem arises > consistently after a minute or two of churn. If I add an extra > "artificial" hash field to each element stored in the set, then the > problem disappears (or perhaps it is postponed). I noticed that the > defective sets always contain many elements with the same hash. (I know > very little about how sets and hashing are implemented.) > > I'll keep debugging. > > - austin > > On Tuesday, May 20, 2014 8:36:37 AM UTC-7, David Nolen wrote: > > Can you demonstrate a complete minimal example? > > Thanks, > David > > > On Tue, May 20, 2014 at 4:06 AM, Austin Haas <[email protected] > <javascript:>> wrote: > > I'm having trouble isolating a small test case. I call the > following code in an update tick: > > (let [prev' @prev > state' @state] > (let [rems (clojure.set/difference prev' state') > adds (clojure.set/difference state' prev')] > (reset! prev state') > (assert (= (count rems) (count (set rems)))))) > > (prev and state hold sets of maps.) > > After running for a few minutes, the assert will fail. The > 'rems' and 'adds' will report that their count is > 1, but when > I try to access the elements there are either none or only one. > > What would cause a set to return an incorrect value for count? > > FWIW, the elements of the sets are maps, and one of the fields > holds a mutable javascript array. That was my first suspicion, > but the array isn't mutated in my code, and I use a memoized > function to generate it (to preserve identity). > > I'm using [org.clojure/clojurescript "0.0-2202"]. > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > <javascript:> > Note that posts from new members are moderated - please be > patient with your first post. > To unsubscribe from this group, send email to > [email protected] <javascript:> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > <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 [email protected] <javascript:>. > For more options, visit https://groups.google.com/d/optout > <https://groups.google.com/d/optout>. > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected] > 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 [email protected] > <mailto:[email protected]>. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
