Newer
Older
NetAddr-IP / t / v6-exclude.t
@Andreas Jaggi Andreas Jaggi on 18 Oct 2015 3 KB Optimize Exclude and add additional tests
use Test::More;
use NetAddr::IP qw(:lower Exclude);

my @r = (
	['2001:db8::/32','2001:db8::/33', [], ['2001:db8:8000::/33']],
	['2001:db8::/64','2001:db8::/64', [], []],
	['2001:db8::/128','2001:db8::/128', [], []],
	['2001:db8::/32','2001:db8:8000::/33', ['2001:db8::/33'], []],
	['2001:db8::/32','2001:db8:8000::/34', ['2001:db8::/33'], ['2001:db8:c000::/34']],
	['::/0','::/128', [], ['0:0:0:0:0:0:0:1/128','0:0:0:0:0:0:0:2/127','0:0:0:0:0:0:0:4/126','0:0:0:0:0:0:0:8/125','0:0:0:0:0:0:0:10/124','0:0:0:0:0:0:0:20/123','0:0:0:0:0:0:0:40/122','0:0:0:0:0:0:0:80/121','0:0:0:0:0:0:0:100/120','0:0:0:0:0:0:0:200/119','0:0:0:0:0:0:0:400/118','0:0:0:0:0:0:0:800/117','0:0:0:0:0:0:0:1000/116','0:0:0:0:0:0:0:2000/115','0:0:0:0:0:0:0:4000/114','0:0:0:0:0:0:0:8000/113','0:0:0:0:0:0:1:0/112','0:0:0:0:0:0:2:0/111','0:0:0:0:0:0:4:0/110','0:0:0:0:0:0:8:0/109','0:0:0:0:0:0:10:0/108','0:0:0:0:0:0:20:0/107','0:0:0:0:0:0:40:0/106','0:0:0:0:0:0:80:0/105','0:0:0:0:0:0:100:0/104','0:0:0:0:0:0:200:0/103','0:0:0:0:0:0:400:0/102','0:0:0:0:0:0:800:0/101','0:0:0:0:0:0:1000:0/100','0:0:0:0:0:0:2000:0/99','0:0:0:0:0:0:4000:0/98','0:0:0:0:0:0:8000:0/97','0:0:0:0:0:1:0:0/96','0:0:0:0:0:2:0:0/95','0:0:0:0:0:4:0:0/94','0:0:0:0:0:8:0:0/93','0:0:0:0:0:10:0:0/92','0:0:0:0:0:20:0:0/91','0:0:0:0:0:40:0:0/90','0:0:0:0:0:80:0:0/89','0:0:0:0:0:100:0:0/88','0:0:0:0:0:200:0:0/87','0:0:0:0:0:400:0:0/86','0:0:0:0:0:800:0:0/85','0:0:0:0:0:1000:0:0/84','0:0:0:0:0:2000:0:0/83','0:0:0:0:0:4000:0:0/82','0:0:0:0:0:8000:0:0/81','0:0:0:0:1:0:0:0/80','0:0:0:0:2:0:0:0/79','0:0:0:0:4:0:0:0/78','0:0:0:0:8:0:0:0/77','0:0:0:0:10:0:0:0/76','0:0:0:0:20:0:0:0/75','0:0:0:0:40:0:0:0/74','0:0:0:0:80:0:0:0/73','0:0:0:0:100:0:0:0/72','0:0:0:0:200:0:0:0/71','0:0:0:0:400:0:0:0/70','0:0:0:0:800:0:0:0/69','0:0:0:0:1000:0:0:0/68','0:0:0:0:2000:0:0:0/67','0:0:0:0:4000:0:0:0/66','0:0:0:0:8000:0:0:0/65','0:0:0:1:0:0:0:0/64','0:0:0:2:0:0:0:0/63','0:0:0:4:0:0:0:0/62','0:0:0:8:0:0:0:0/61','0:0:0:10:0:0:0:0/60','0:0:0:20:0:0:0:0/59','0:0:0:40:0:0:0:0/58','0:0:0:80:0:0:0:0/57','0:0:0:100:0:0:0:0/56','0:0:0:200:0:0:0:0/55','0:0:0:400:0:0:0:0/54','0:0:0:800:0:0:0:0/53','0:0:0:1000:0:0:0:0/52','0:0:0:2000:0:0:0:0/51','0:0:0:4000:0:0:0:0/50','0:0:0:8000:0:0:0:0/49','0:0:1:0:0:0:0:0/48','0:0:2:0:0:0:0:0/47','0:0:4:0:0:0:0:0/46','0:0:8:0:0:0:0:0/45','0:0:10:0:0:0:0:0/44','0:0:20:0:0:0:0:0/43','0:0:40:0:0:0:0:0/42','0:0:80:0:0:0:0:0/41','0:0:100:0:0:0:0:0/40','0:0:200:0:0:0:0:0/39','0:0:400:0:0:0:0:0/38','0:0:800:0:0:0:0:0/37','0:0:1000:0:0:0:0:0/36','0:0:2000:0:0:0:0:0/35','0:0:4000:0:0:0:0:0/34','0:0:8000:0:0:0:0:0/33','0:1:0:0:0:0:0:0/32','0:2:0:0:0:0:0:0/31','0:4:0:0:0:0:0:0/30','0:8:0:0:0:0:0:0/29','0:10:0:0:0:0:0:0/28','0:20:0:0:0:0:0:0/27','0:40:0:0:0:0:0:0/26','0:80:0:0:0:0:0:0/25','0:100:0:0:0:0:0:0/24','0:200:0:0:0:0:0:0/23','0:400:0:0:0:0:0:0/22','0:800:0:0:0:0:0:0/21','0:1000:0:0:0:0:0:0/20','0:2000:0:0:0:0:0:0/19','0:4000:0:0:0:0:0:0/18','0:8000:0:0:0:0:0:0/17','1:0:0:0:0:0:0:0/16','2:0:0:0:0:0:0:0/15','4:0:0:0:0:0:0:0/14','8:0:0:0:0:0:0:0/13','10:0:0:0:0:0:0:0/12','20:0:0:0:0:0:0:0/11','40:0:0:0:0:0:0:0/10','80:0:0:0:0:0:0:0/9','100:0:0:0:0:0:0:0/8','200:0:0:0:0:0:0:0/7','400:0:0:0:0:0:0:0/6','800:0:0:0:0:0:0:0/5','1000:0:0:0:0:0:0:0/4','2000:0:0:0:0:0:0:0/3','4000:0:0:0:0:0:0:0/2','8000:0:0:0:0:0:0:0/1']],
	['2001:db8::/128','2001:db8:1::/128', ['2001:db8::/128'], []],
);

plan tests => 4 * scalar @r;

SKIP: {
	foreach my $case (@r) {
		my ($low, $up) = Exclude(NetAddr::IP->new($case->[0]), NetAddr::IP->new($case->[1]));
		my $ex_low = [map { NetAddr::IP->new($_) } @{$case->[2]}];
		my $ex_up = [map { NetAddr::IP->new($_) } @{$case->[3]}];
		is("@$up", "@$ex_up", "Upper half of Exclude($case->[0],$case->[1]) is @$ex_up");
		is("@$low", "@$ex_low", "Lower half of Exclude($case->[0],$case->[1]) is @$ex_low");

		($low, $up) = NetAddr::IP->new($case->[0])->Exclude(NetAddr::IP->new($case->[1]));
		is("@$up", "@$ex_up", "Upper half of ($case->[0])->Exclude($case->[1]) is @$ex_up");
		is("@$low", "@$ex_low", "Lower half of ($case->[0])->Exclude($case->[1]) is @$ex_low");
	}
}