The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test;
BEGIN { plan test => 25; }

use Net::IPv6Addr;
ok(1);

my @x;

# Test ipv6_parse_preferred, garbage input.
eval { @x = Net::IPv6Addr::ipv6_parse_preferred("nathan jones"); };
ok($@);
ok($@, qr/invalid address/);

# Test ipv6_parse_preferred, too many :
eval { @x = Net::IPv6Addr::ipv6_parse_preferred("0:1:2:3:4:5:6:7:8"); };
ok($@);
ok($@, qr/invalid address/);

# Test ipv6_parse_preferred, not enough :
eval { @x = Net::IPv6Addr::ipv6_parse_preferred("0:1:2:3:4:5:6"); };
ok($@);
ok($@, qr/invalid address/);

# Test ipv6_parse_preferred, bad digits.
eval { @x = Net::IPv6Addr::ipv6_parse_preferred("0:1:2:3:4:5:6:x"); };
ok($@);
ok($@, qr/invalid address/);

# Test ipv6_parse_preferred, adjacent :
eval { @x = Net::IPv6Addr::ipv6_parse_preferred("0:1:2:3:4:5:6::7"); };
ok($@);
ok($@, qr/invalid address/);

# Test ipv6_parse_preferred, too many digits.
eval { @x = Net::IPv6Addr::ipv6_parse_preferred("0:1:2:3:4:5:6:789ab"); };
ok($@);
ok($@, qr/invalid address/);

# Test ipv6_parse_preferred, : on boundary.
eval { @x = Net::IPv6Addr::ipv6_parse_preferred(":0:1:2:3:4:5:6"); };
ok($@);
ok($@, qr/invalid address/);

eval { @x = Net::IPv6Addr::ipv6_parse_preferred("0:1:2:3:4:5:6:"); };
ok($@);
ok($@, qr/invalid address/);

# Test ipv6_parse_preferred, with good stuff.

@x = Net::IPv6Addr::ipv6_parse_preferred("0:1:2:3:4:5:6:7");
for my $i (0..7) { ok($x[$i], $i); }