1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* complex.c (nucomp_hash), rational.c (nurat_hash): not to use

hash value of class so that equality against subclasses can
  work.  [ruby-dev:38850]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2009-07-25 04:44:36 +00:00
parent 4fd615943e
commit d6ab828369
5 changed files with 19 additions and 8 deletions

View file

@ -1,3 +1,9 @@
Sat Jul 25 13:44:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* complex.c (nucomp_hash), rational.c (nurat_hash): not to use
hash value of class so that equality against subclasses can
work. [ruby-dev:38850]
Sat Jul 25 01:05:59 2009 NARUSE, Yui <naruse@ruby-lang.org>
* enc/big5.c: Fix EncLen_BIG5 for Big5-HKSCS. see [ruby-core:24390]

View file

@ -1156,15 +1156,14 @@ nucomp_numerator(VALUE self)
static VALUE
nucomp_hash(VALUE self)
{
long v, h[3];
long v, h[2];
VALUE n;
get_dat1(self);
h[0] = rb_hash(rb_obj_class(self));
n = rb_hash(dat->real);
h[1] = NUM2LONG(n);
h[0] = NUM2LONG(n);
n = rb_hash(dat->imag);
h[2] = NUM2LONG(n);
h[1] = NUM2LONG(n);
v = rb_memhash(h, sizeof(h));
return LONG2FIX(v);
}

View file

@ -1360,15 +1360,14 @@ nurat_to_r(VALUE self)
static VALUE
nurat_hash(VALUE self)
{
long v, h[3];
long v, h[2];
VALUE n;
get_dat1(self);
h[0] = rb_hash(rb_obj_class(self));
n = rb_hash(dat->num);
h[1] = NUM2LONG(n);
h[0] = NUM2LONG(n);
n = rb_hash(dat->den);
h[2] = NUM2LONG(n);
h[1] = NUM2LONG(n);
v = rb_memhash(h, sizeof(h));
return LONG2FIX(v);
}

View file

@ -36,6 +36,9 @@ class Complex_Test < Test::Unit::TestCase
assert_instance_of(ComplexSub, c5)
end
c1 = Complex(1)
assert_equal(c1.hash, c.hash, '[ruby-dev:38850]')
assert_equal([true, true], [c.eql?(c1), c1.eql?(c)])
end
def test_eql_p

View file

@ -35,6 +35,10 @@ class Rational_Test < Test::Unit::TestCase
assert_equal(c, c5)
assert_instance_of(RationalSub, c5)
end
c1 = Rational(1)
assert_equal(c1.hash, c.hash, '[ruby-dev:38850]')
assert_equal([true, true], [c.eql?(c1), c1.eql?(c)])
end
def test_eql_p