def test_ipset_operations_with_combined_ipv4_and_ipv6():
s1 = IPSet(['192.0.2.0', '::192.0.2.0', '192.0.2.2', '::192.0.2.2'])
s2 = IPSet(['192.0.2.2', '::192.0.2.2', '192.0.2.4', '::192.0.2.4'])
s3 = IPSet(['0.0.0.1', '10.0.0.64/30', '255.255.255.1'])
s4 = IPSet(['10.0.0.64', '10.0.0.66'])
s4b = IPSet(['10.0.0.64', '10.0.0.66', '111.111.111.111'])
s5 = IPSet(['10.0.0.65', '10.0.0.67'])
s6 = IPSet(['2405:8100::/32'])
assert bool(s6)
assert not bool(IPSet())
# set intersection
assert s2 & s1 == IPSet(['192.0.2.2/32', '::192.0.2.2/128'])
assert s3 & s4 == IPSet(['10.0.0.64/32', '10.0.0.66/32'])
assert s4 & s3 == IPSet(['10.0.0.64/32', '10.0.0.66/32'])
assert s3 & s5 == IPSet(['10.0.0.65/32', '10.0.0.67/32'])
assert s5 & s3 == IPSet(['10.0.0.65/32', '10.0.0.67/32'])
# set difference
assert s3 - s4 == IPSet(['0.0.0.1/32', '10.0.0.65/32', '10.0.0.67/32', '255.255.255.1/32'])
assert s4 - s3 == IPSet([])
assert s3 - s4b == IPSet(['0.0.0.1/32', '10.0.0.65/32', '10.0.0.67/32', '255.255.255.1/32'])
assert s3 - s5 == IPSet(['0.0.0.1/32', '10.0.0.64/32', '10.0.0.66/32', '255.255.255.1/32'])
assert s5 - s3 == IPSet([])
# set symmetric difference
assert s2 ^ s1 == IPSet(['192.0.2.0/32', '192.0.2.4/32', '::192.0.2.0/128', '::192.0.2.4/128'])
assert IPSet([]) ^ IPSet([]) == IPSet([])
assert IPSet(['0.0.0.1/32']) ^ IPSet([]) == IPSet(['0.0.0.1/32'])
assert IPSet(['0.0.0.1/32']) ^ IPSet(['0.0.0.1/32']) == IPSet([])
assert s3 ^ s4 == IPSet(['0.0.0.1/32', '10.0.0.65/32', '10.0.0.67/32', '255.255.255.1/32'])
assert s4 ^ s3 == IPSet(['0.0.0.1/32', '10.0.0.65/32', '10.0.0.67/32', '255.255.255.1/32'])
assert s3 ^ s4b == IPSet(['0.0.0.1/32', '10.0.0.65/32', '10.0.0.67/32', '111.111.111.111/32', '255.255.255.1/32'])
assert s3 ^ s5 == IPSet(['0.0.0.1/32', '10.0.0.64/32', '10.0.0.66/32', '255.255.255.1/32'])
assert s5 ^ s3 == IPSet(['0.0.0.1/32', '10.0.0.64/32', '10.0.0.66/32', '255.255.255.1/32'])
评论列表
文章目录