summaryrefslogtreecommitdiff
path: root/lib/ipaddr.rb
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-08-05 15:13:07 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-08-05 15:13:07 +0000
commit20a684739e1e6cb2e37a61c8b260532c8b483643 (patch)
treeb9343987eb2490fda9d5cd1c992d3610c0e9b888 /lib/ipaddr.rb
parent8bc6c715475aae33d292b077003d15ea47b9913f (diff)
* lib/ipaddr.rb (IPAddr#hash): Take account of netmask; submitted
by Nobuhiro IMAI in [ruby-dev:39011] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24411 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/ipaddr.rb')
-rw-r--r--lib/ipaddr.rb12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/ipaddr.rb b/lib/ipaddr.rb
index 8de9c919ff..282ca09a8f 100644
--- a/lib/ipaddr.rb
+++ b/lib/ipaddr.rb
@@ -338,7 +338,7 @@ class IPAddr
# 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 @@ class TC_Operator < Test::Unit::TestCase
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))