1#!perl 2 3use strict; 4use warnings; 5use Test::More tests => 10; 6use Net::CIDR::Set; 7 8{ 9 ok defined( my $set = Net::CIDR::Set->new ), "set created OK"; 10 isa_ok $set, 'Net::CIDR::Set'; 11 $set->add( '127.0.0.1' ); 12 my @got = $set->as_address_array; 13 is_deeply [@got], ['127.0.0.1'], "got address"; 14} 15 16{ 17 my $set = Net::CIDR::Set->new; 18 $set->add( '192.168.0.0/16' ); 19 { 20 my @got = $set->as_cidr_array; 21 is_deeply [@got], ['192.168.0.0/16'], "got cidr"; 22 } 23 $set->remove( '192.168.0.65' ); 24 { 25 my @got = $set->as_range_array; 26 is_deeply [@got], 27 [ '192.168.0.0-192.168.0.64', '192.168.0.66-192.168.255.255' ], 28 "got range"; 29 my $s2 = Net::CIDR::Set->new( @got ); 30 ok $set->equals( $s2 ), "can reparse"; 31 } 32 { 33 my @got = $set->as_cidr_array; 34 is_deeply [@got], 35 [ 36 '192.168.0.0/26', '192.168.0.64', 37 '192.168.0.66/31', '192.168.0.68/30', 38 '192.168.0.72/29', '192.168.0.80/28', 39 '192.168.0.96/27', '192.168.0.128/25', 40 '192.168.1.0/24', '192.168.2.0/23', 41 '192.168.4.0/22', '192.168.8.0/21', 42 '192.168.16.0/20', '192.168.32.0/19', 43 '192.168.64.0/18', '192.168.128.0/17' 44 ], 45 "got cidr"; 46 my $s2 = Net::CIDR::Set->new( @got ); 47 ok $set->equals( $s2 ), "can reparse"; 48 } 49} 50 51{ 52 my @private = map { Net::CIDR::Set->new( $_ ) } '10.0.0.0/8', 53 '192.168.0.0/16', '172.16.0.0/12'; 54 my $all_priv = Net::CIDR::Set->new; 55 for my $priv ( @private ) { 56 $all_priv = $all_priv->union( $priv ); 57 } 58 my @got = $all_priv->as_cidr_array; 59 is_deeply [@got], 60 [ '10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', ], 61 "union"; 62} 63 64{ 65 my $s1 = Net::CIDR::Set->new( '10.0.0.0/9' ); 66 my $s2 = Net::CIDR::Set->new( '10.128.0.0/9' ); 67 my $hit = $s1->intersection( $s2 ); 68 ok $hit->is_empty, "no intersection" or diag "got $hit"; 69} 70 71# vim:ts=2:sw=2:et:ft=perl 72