Skip to content

Commit

Permalink
Added IPAddr#+/-
Browse files Browse the repository at this point in the history
  • Loading branch information
taketo1113 committed Aug 7, 2024
1 parent 036836d commit 78b4f53
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
10 changes: 10 additions & 0 deletions lib/ipaddr.rb
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,16 @@ def ~
return self.clone.set(addr_mask(~@addr))
end

# Returns a new ipaddr greater than the original address by offset
def +(offset)
self.clone.set(@addr + offset, @family)
end

# Returns a new ipaddr less than the original address by offset
def -(offset)
self.clone.set(@addr - offset, @family)
end

# Returns true if two ipaddrs are equal.
def ==(other)
other = coerce_other(other)
Expand Down
40 changes: 40 additions & 0 deletions test/test_ipaddr.rb
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,46 @@ def test_carrot
assert_equal("::", @in6_addr_any.to_s)
end

def test_plus
a = IPAddr.new("192.168.1.10")
assert_equal("192.168.1.20", (a + 10).to_s)

a = IPAddr.new("0.0.0.0")
assert_equal("0.0.0.10", (a + 10).to_s)

a = IPAddr.new("255.255.255.255")
assert_raise(IPAddr::InvalidAddressError) { a + 10 }

a = IPAddr.new("3ffe:505:2::a")
assert_equal("3ffe:505:2::14", (a + 10).to_s)

a = IPAddr.new("::")
assert_equal("::a", (a + 10).to_s)

a = IPAddr.new("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")
assert_raise(IPAddr::InvalidAddressError) { a + 10 }
end

def test_minus
a = IPAddr.new("192.168.1.10")
assert_equal("192.168.1.0", (a - 10).to_s)

a = IPAddr.new("0.0.0.0")
assert_raise(IPAddr::InvalidAddressError) { a - 10 }

a = IPAddr.new("255.255.255.255")
assert_equal("255.255.255.245", (a - 10).to_s)

a = IPAddr.new("3ffe:505:2::a")
assert_equal("3ffe:505:2::", (a - 10).to_s)

a = IPAddr.new("::")
assert_raise(IPAddr::InvalidAddressError) { a - 10 }

a = IPAddr.new("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")
assert_equal("ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff5", (a - 10).to_s)
end

def test_equal
assert_equal(true, @a == IPAddr.new("3FFE:505:2::"))
assert_equal(true, @a == IPAddr.new("3ffe:0505:0002::"))
Expand Down

0 comments on commit 78b4f53

Please sign in to comment.