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