[ruby-core:74464] [Ruby trunk Bug#12198][Assigned] Hash#== sometimes returns false incorrectly

From: mame@...
Date: 2016-03-19 15:32:43 UTC
List: ruby-core #74464
Issue #12198 has been updated by Yusuke Endoh.

Status changed from Open to Assigned
Assignee set to Akinori MUSHA

Simplified.

~~~~
require "set"

a = []
s1 = Set[a]
a << 42

s2 = Set[[42]]

p s2 #=> #<Set: {[42]}>
p s1 #=> #<Set: {[42]}>
p s2 == s1 #=> false
~~~~

Modifying an element of a set causes this issue.  I'm unsure if this is a bug.

-- 
Yusuke Endoh <mame@ruby-lang.org>

----------------------------------------
Bug #12198: Hash#== sometimes returns false incorrectly
https://bugs.ruby-lang.org/issues/12198#change-57588

* Author: Sebastian Skalacki
* Status: Assigned
* Priority: Normal
* Assignee: Akinori MUSHA
* ruby -v: ruby 2.4.0dev (2016-03-11 trunk 54086) [x86_64-darwin14]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
Hi!

Sorry for lack of the accuracy in the bug title. I have some trouble with pinpointing the issue.

According to documentation, "two hashes are equal if they each contain the same number of keys and if each key-value pair is equal to (according to Object#==) the corresponding elements in the other hash." I was able to produce two hashes which satisfy this condition, however the method returns false. In other words, following happens:

~~~
e.class #=> Hash
r.class #=> Hash
e.size == r.size #=> true
e.each_pair.to_a == r.each_pair.to_a #=> true
e == r #=> false
~~~

That happens in Ruby 1.9.3, 2.3, 2.4 and probably in other versions as well. Pure Ruby, no gem could interfere.

Happy Easter ]:->

---Files--------------------------------
problem.rb (1.69 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next