mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* hash.c (hash_i): return different values for inverse hash.
[ruby-core:34334] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30514 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5a17f4c4a3
commit
79654f3fd3
3 changed files with 19 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
|||
Wed Jan 12 08:37:07 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* hash.c (hash_i): return different values for inverse hash.
|
||||
[ruby-core:34334]
|
||||
|
||||
Tue Jan 11 20:32:59 2011 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* variable.c: parenthesize macro arguments.
|
||||
|
|
8
hash.c
8
hash.c
|
@ -1663,9 +1663,12 @@ static int
|
|||
hash_i(VALUE key, VALUE val, VALUE arg)
|
||||
{
|
||||
st_index_t *hval = (st_index_t *)arg;
|
||||
st_index_t hdata[2];
|
||||
|
||||
if (key == Qundef) return ST_CONTINUE;
|
||||
*hval ^= rb_hash_end(rb_hash_uint(rb_hash_start(rb_hash(key)), rb_hash(val)));
|
||||
hdata[0] = rb_hash(key);
|
||||
hdata[1] = rb_hash(val);
|
||||
*hval ^= st_hash(hdata, sizeof(hdata), 0);
|
||||
return ST_CONTINUE;
|
||||
}
|
||||
|
||||
|
@ -1678,9 +1681,10 @@ recursive_hash(VALUE hash, VALUE dummy, int recur)
|
|||
return LONG2FIX(0);
|
||||
hval = RHASH(hash)->ntbl->num_entries;
|
||||
if (recur)
|
||||
hval = rb_hash_end(rb_hash_uint(rb_hash_start(rb_hash(rb_cHash)), hval));
|
||||
hval = rb_hash_uint(rb_hash_start(rb_hash(rb_cHash)), hval);
|
||||
else
|
||||
rb_hash_foreach(hash, hash_i, (VALUE)&hval);
|
||||
hval = rb_hash_end(hval);
|
||||
return INT2FIX(hval);
|
||||
}
|
||||
|
||||
|
|
|
@ -904,4 +904,11 @@ class TestHash < Test::Unit::TestCase
|
|||
h.rehash
|
||||
assert_equal(:foo, h[h])
|
||||
end
|
||||
|
||||
def test_inverse_hash
|
||||
feature4262 = '[ruby-core:34334]'
|
||||
[{1=>2}, {123=>"abc"}].each do |h|
|
||||
assert_not_equal(h.hash, h.invert.hash, feature4262)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue