ruby-changes:12696
From: knu <ko1@a...>
Date: Thu, 6 Aug 2009 00:15:20 +0900 (JST)
Subject: [ruby-changes:12696] Ruby:r24411 (trunk): * lib/ipaddr.rb (IPAddr#hash): Take account of netmask; submitted
knu 2009-08-06 00:13:07 +0900 (Thu, 06 Aug 2009) New Revision: 24411 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24411 Log: * lib/ipaddr.rb (IPAddr#hash): Take account of netmask; submitted by Nobuhiro IMAI in [ruby-dev:39011] Modified files: trunk/ChangeLog trunk/lib/ipaddr.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 24410) +++ ChangeLog (revision 24411) @@ -1,3 +1,8 @@ +Thu Aug 6 00:09:56 2009 Akinori MUSHA <knu@i...> + + * lib/ipaddr.rb (IPAddr#hash): Take account of netmask; submitted + by Nobuhiro IMAI in [ruby-dev:39011] + Wed Aug 5 19:19:13 2009 Nobuyoshi Nakada <nobu@r...> * ruby.c (load_file_internal): assumes -x flag if no "ruby" is in Index: lib/ipaddr.rb =================================================================== --- lib/ipaddr.rb (revision 24410) +++ lib/ipaddr.rb (revision 24411) @@ -338,7 +338,7 @@ # Returns a hash value used by Hash, Set, and Array classes def hash - return (@addr.hash << 1) | (ipv4? ? 0 : 1) + return ([@addr, @mask_addr].hash << 1) | (ipv4? ? 0 : 1) end # Creates a Range object for the network address. @@ -827,17 +827,19 @@ a4 = IPAddr.new('3ffe:505:2::1') a5 = IPAddr.new('127.0.0.1') a6 = IPAddr.new('::1') + a7 = IPAddr.new('192.168.2.0/25') + a8 = IPAddr.new('192.168.2.0/25') - h = { a1 => 'ipv4', a2 => 'ipv4', a3 => 'ipv6', a4 => 'ipv6', a5 => 'ipv4', a6 => 'ipv6' } - assert_equal(4, h.size) + h = { a1 => 'ipv4', a2 => 'ipv4', a3 => 'ipv6', a4 => 'ipv6', a5 => 'ipv4', a6 => 'ipv6', a7 => 'ipv4', a8 => 'ipv4'} + assert_equal(5, h.size) assert_equal('ipv4', h[a1]) assert_equal('ipv4', h[a2]) assert_equal('ipv6', h[a3]) assert_equal('ipv6', h[a4]) require 'set' - s = Set[a1, a2, a3, a4, a5, a6] - assert_equal(4, s.size) + s = Set[a1, a2, a3, a4, a5, a6, a7, a8] + assert_equal(5, s.size) assert_equal(true, s.include?(a1)) assert_equal(true, s.include?(a2)) assert_equal(true, s.include?(a3)) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/