use NetAddr::IP::Lite; use Test::More; my @yes_pairs = ( [ '::/0', '2001:620:0:4:a00:20ff:fe9c:7e4a' ], [ '3ffe:2000:0:4::/64', '3ffe:2000:0:4:a00:20ff:fe9c:7e4a' ], [ '3ffe:2000:0:4::/64', '3ffe:2000:0:4:a00:20ff:fe9c:7e4a/65' ], [ '2001:620:0:4::/64', '2001:620:0:4:a00:20ff:fe9c:7e4a' ], [ '2001:620:0:4::/64', '2001:620:0:4:a00:20ff:fe9c:7e4a/65' ], [ '2001:620:0:4::/64', '2001:620:0:4::1' ], [ '2001:620:0:4::/64', '2001:620:0:4:0:0:0:1' ], [ 'deaf:beef::/32', 'deaf:beef::1' ], [ 'deaf:beef::/32', 'deaf:beef::1:1' ], [ 'deaf:beef::/32', 'deaf:beef::1:0:1' ], [ 'deaf:beef::/32', 'deaf:beef::1:0:0:1' ], [ 'deaf:beef::/32', 'deaf:beef::1:0:0:0:1' ], ); my @no_pairs = ( [ '3ffe:2000:0:4::/64', '3ffe:2000:0:4:a00:20ff:fe9c:7e4a/63' ], [ '2001:620:0:4::/64', '2001:620:0:4:a00:20ff:fe9c:7e4a/63' ], [ 'deaf:beef::/32', 'dead:cafe::1' ], [ 'deaf:beef::/32', 'dead:cafe::1:1' ], [ 'deaf:beef::/32', 'dead:cafe::1:0:1' ], [ 'deaf:beef::/32', 'dead:cafe::1:0:0:1' ], [ 'deaf:beef::/32', 'dead:cafe::1:0:0:0:1' ], ); my $tests = 6 * @yes_pairs + 1; plan tests => $tests; ok(NetAddr::IP::Lite->new('::')->contains(NetAddr::IP::Lite->new('::')), ":: contains itself"); for my $p (@yes_pairs) { my $a = new NetAddr::IP::Lite $p->[0]; my $b = new NetAddr::IP::Lite $p->[1]; isa_ok($a, 'NetAddr::IP::Lite', "$p->[0]"); isa_ok($b, 'NetAddr::IP::Lite', "$p->[1]"); SKIP: { ok($a->contains($b), "->contains $p->[0], $p->[1] is true"); ok($b->within($a), "->within $p->[1], $p->[0] is true"); ok(!$b->contains($a), "->contains $p->[1], $p->[0] is false"); ok(!$a->within($b), "->within $p->[0], $p->[1] is false"); } }