use NetAddr::IP qw(Compact); # $Id: v4-compact.t,v 1.1.1.1 2006/08/14 15:36:06 lem Exp $ my @r = ( [ '10.0.0.0', '255.255.255.0'], [ '11.0.0.0', '255.255.255.0'], [ '12.0.0.0', '255.255.255.0'], [ '20.0.0.0', '255.255.0.0'], [ '30.0.0.0', '255.255.0.0'], [ '40.0.0.0', '255.255.0.0'], ); $| = 1; if (defined($ENV{LIGHTERIPTESTS}) and $ENV{LIGHTERIPTESTS} =~ /yes/i) { print "1..0 # Skipped: LIGHTERIPTESTS = yes\n"; exit 0; } print "1..9\n"; my @ips1; for my $ip ('10.0.0.0', '11.0.0.0', '12.0.0.0') { push @ips1, NetAddr::IP->new($ip, 24)->split(32); } for my $ip ('20.0.0.0', '30.0.0.0', '40.0.0.0') { push @ips1, NetAddr::IP->new($ip, 16)->split(28); } my @ips2; for my $num (0 .. 255) { push @ips2, NetAddr::IP->new("192.168.$num.0", 24); } my $ips2_compact = '192.168.0.0/16'; # Compact(@) # compact_ips1_check(1, Compact(@ips1)); compact_ips2_check(2, Compact(@ips2)); # ->compact(@) # compact_ips1_check(3, $ips1[0]->compact(@ips1[1..$#ips1])); compact_ips2_check(4, $ips2[0]->compact(@ips2[1..$#ips2])); # Compact([]) # compact_ips1_check(5, @{Compact(\@ips1)}); compact_ips2_check(6, @{Compact(\@ips2)}); # ->compactref([]) # compact_ips1_check(7, @{$ips1[0]->compactref([@ips1[1..$#ips1]])}); compact_ips2_check(8, @{$ips2[0]->compactref([@ips2[1..$#ips2]])}); # duplicate IP # @ips1 = (); for my $ip (qw(1.1.1.1 1.1.1.1 1.1.1.1 1.1.1.1)) { push(@ips1, NetAddr::IP->new($ip)); } @c = NetAddr::IP::compact(@ips1); if (@c == 1 and $c[0]->cidr() eq '1.1.1.1/32') { print "ok 9\n"; } else { print "not ok 9\n"; } ###################################################################### sub compact_ips1_check { my $num = shift; my @ips = shift; my @mips; for my $ip (@ips) { push @mips, grep { $ip->addr eq $_->[0] and $ip->mask eq $_->[1] } @r; } if (@mips == @ips) { print "ok $num\n"; } else { print "not ok $num\n"; } } ###################################################################### sub compact_ips2_check { my $num = shift; my @ips = shift; if (@ips == 1 and $ips[0] eq $ips2_compact) { print "ok $num\n"; } else { print "not ok $num\n"; } }