# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
######################### We start with some black magic to print on failure.
# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)
BEGIN { $| = 1; $debug = 1; print "1..18\n"; }
END {print "not ok 1\n" unless $loaded;}
use Net::Patricia;
$loaded = 1;
print "ok 1\n";
######################### End of black magic.
# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):
print ref($t = new Net::Patricia)? "ok 2\n" : "not ok 2\n";
print $t->add_string('127.0.0.0/8')? "ok 3\n" : "not ok 3\n";
if ('127.0.0.0/8' eq $t->match_string("127.0.0.1")) {
print "ok 4\n"
} else {
print "not ok 4\n"
}
if ('127.0.0.0/8' eq $t->match_integer(2130706433)) { # 127.0.0.1
print "ok 5\n"
} else {
print "not ok 5\n"
}
if (!$t->match_string("10.0.0.1")) {
print "ok 6\n"
} else {
print "not ok 6\n"
}
if (!$t->match_integer(42)) {
print "ok 7\n"
} else {
print "not ok 7\n"
}
{
my $ten = new Thingy 10;
my $twenty = new Thingy 20;
print $t->add_string('10.0.0.0/8', $ten)? "ok 8\n" : "not ok 8\n";
}
print("Destructor 10 should *not* have run yet.\n") if $debug;
foreach my $subnet (qw(10.42.42.0/31 10.42.42.0/26 10.42.42.0/24 10.42.42.0/32 10.42.69.0/24)) {
$t->add_string($subnet) || die
}
die if $t->match_string('10.42.42.0/24') eq $t->match_string('10.42.69.0/24');
if (10 == ${$t->match_integer(168430090)}) { # 10.10.10.10
print "ok 9\n"
} else {
print "not ok 9\n"
}
if ($t->match_string("10.0.0.1")) {
print "ok 10\n"
} else {
print "not ok 10\n"
}
if (!$t->match_exact_integer(167772160)) { # 10.0.0.0
print "ok 11\n"
} else {
print "not ok 11\n"
}
if ($t->match_exact_integer(167772160, 8)) { # 10.0.0.0
print "ok 12\n"
} else {
print "not ok 12\n"
}
if (10 == ${$t->match_exact_string("10.0.0.0/8")}) {
print "ok 13\n"
} else {
print "not ok 13\n"
}
if (!$t->remove_string("42.0.0.0/8")) {
print "ok 14\n"
} else {
print "not ok 14\n"
}
if (10 == ${$t->remove_string("10.0.0.0/8")}) {
print "ok 15\n"
} else {
print "not ok 15\n"
}
print("Destructor 10 should have just run.\n") if $debug;
if (!$t->match_exact_integer(167772160, 8)) { # 10.0.0.0
print "ok 16\n"
} else {
print "not ok 16\n"
}
# print "YOU SHOULD SEE A USAGE ERROR HERE:\n";
# $t->match_exact_integer(167772160, 8, 10);
if (6 == $t->climb_inorder(sub { print "climbing at $_[0]\n" })) {
print "ok 17\n"
} else {
print "not ok 17\n"
}
$t->climb;
eval '$t->add_string("_")'; # invalid key
if ($@ && $@ =~ m/invalid/i) {
print "ok 18\n"
} else {
print "not ok 18\n"
}
undef $t;
exit;
package Thingy;
sub new {
my $class = shift(@_);
my $self = shift(@_);
return bless \$self, $class
}
sub DESTROY {
my $self = shift(@_);
print("$$self What a world, what a world...\n")
}
syntax highlighted by Code2HTML, v. 0.9.1