mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
hash value of enumerable should be obtained from its elements; close #1658
This commit is contained in:
@@ -395,4 +395,13 @@ module Enumerable
|
||||
#
|
||||
# ISO 15.3.2.2.20
|
||||
alias to_a entries
|
||||
|
||||
# redefine #hash 15.3.1.3.15
|
||||
def hash
|
||||
h = 12347
|
||||
self.each do |e|
|
||||
h ^= e.hash
|
||||
end
|
||||
h
|
||||
end
|
||||
end
|
||||
|
||||
@@ -28,6 +28,15 @@ class Range
|
||||
end
|
||||
self
|
||||
end
|
||||
|
||||
# redefine #hash 15.3.1.3.15
|
||||
def hash
|
||||
h = first.hash ^ last.hash
|
||||
if self.exclude_end?
|
||||
h += 1
|
||||
end
|
||||
h
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
|
||||
+1
-3
@@ -301,6 +301,7 @@ assert('Array#hash', '15.2.12.5.35') do
|
||||
a = [ 1, 2, 3 ]
|
||||
|
||||
assert_true(a.hash.is_a? Integer)
|
||||
assert_equal([1,2].hash, [1,2].hash)
|
||||
end
|
||||
|
||||
assert('Array#<=>', '15.2.12.5.36') do
|
||||
@@ -328,6 +329,3 @@ assert("Array (Longish inline array)") do
|
||||
ary.each {|p| h[p.class] += 1}
|
||||
assert_equal({Array=>200}, h)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user