### ----------------------------------------------------
### -- Net::Netmask
### -- Licenses: Artistic-2.0
### -- Authors: github:0racle, github:jmaslak, github:lukasvalle
### -- File: t/05-construction6.t
### ----------------------------------------------------
use Test;
use lib 'lib';

#
# Copyright © 2018 Lukas Valle
# See License 
#

use Net::Netmask;

my @valid_input_ip6 =
        {:ip<0000:0000:0000:0000:0000:0000:0000:0001>, :desc<::1/128>},
        {:ip<::1>,                                     :desc<::1/128>},
        {:ip<fd9e:21a7:a92c:2323::1/128>,              :desc<fd9e:21a7:a92c:2323::1/128>},
        {:ip<fd9e:21a7:a92c:2323:0:0:0:0/128>,         :desc<fd9e:21a7:a92c:2323::/128>},
        {:ip<fd9e:21a7:a92c:2323:0:0:0:1/128>,         :desc<fd9e:21a7:a92c:2323::1/128>},
        {:ip<fd9e:21a7:a92c:2323:0:0:0:1>,             :desc<fd9e:21a7:a92c:2323::1/128>},
        {:ip<fd9e:21a7:a92c:2323::/128>,               :desc<fd9e:21a7:a92c:2323::/128>};

for @valid_input_ip6 -> $test {
    my $net = Net::Netmask.new( $test<ip> );
    is $net.Str.lc, $test<desc>, $test<ip> ~ ' >compress> ' ~ $test<desc> ;
}


my @valid_input_ip =
        {:ip<0000:0000:0000:0000:0000:0000:0000:0001>, :desc<::1/128>},
        {:ip<::1>,                                     :desc<::1/128>},
        {:ip<fd9e:21a7:a92c:2323::1/128>,              :desc<fd9e:21a7:a92c:2323::1/128>},
        {:ip<fd9e:21a7:a92c:2323:0:0:0:1/128>,         :desc<fd9e:21a7:a92c:2323::1/128>},
        {:ip<fd9e:21a7:a92c:2323:0:0:0:1>,             :desc<fd9e:21a7:a92c:2323::1/128>};

for @valid_input_ip -> $test {
    my $net = Net::Netmask.new( $test<ip> );
    isa-ok $net, 'Net::Netmask', 'isa Net::Netmask ' ~ $test<desc>;
    is $net.Str.lc, $test<desc>;
}


#from: https://metacpan.org/source/SALVA/Regexp-IPv6-0.03/t/Regexp-IPv6.t
for
<::1
::ffff:12.34.56.78
::ffff:192.168.1.26
::ffff:192.168.1.1
::FFFF:129.144.52.38
0:0:0:0:0:FFFF:129.144.52.38
::ffff:192.0.2.128
2001:0db8:85a3:0000:0000:8a2e:0370:7334
2001:db8:85a3:0:0:8a2e:370:7334
2001:db8:85a3::8a2e:370:7334
2001:0db8:0000:0000:0000:0000:1428:57ab
2001:0db8:0000:0000:0000::1428:57ab
2001:0db8:0:0:0:0:1428:57ab
2001:0db8:0:0::1428:57ab
2001:0db8::1428:57ab
2001:db8::1428:57ab
::ffff:0c22:384e
2001:0db8:1234:ffff:ffff:ffff:ffff:ffff
2001:0db8:1234:0000:0000:0000:0000:0000
2001:db8:a::123
fc00::
::ffff:0:0
2001::
2001:10::
2001:db8::
2001:0000:1234:0000:0000:C1C0:ABCD:0876
3ffe:0b00:0000:0000:0001:0000:0000:000a
FF02:0000:0000:0000:0000:0000:0000:0001
0000:0000:0000:0000:0000:0000:0000:0001
0000:0000:0000:0000:0000:0000:0000:0000
2::10
ff02::1
fe80::
2002::
2001:db8::
2001:0db8:1234::
::ffff:0:0
::1
1:2:3:4:5:6:7:8
1:2:3:4:5:6::8
1:2:3:4:5::8
1:2:3:4::8
1:2:3::8
1:2::8
1::8
1::2:3:4:5:6:7
1::2:3:4:5:6
1::2:3:4:5
1::2:3:4
1::2:3
1::8
::2:3:4:5:6:7:8
::2:3:4:5:6:7
::2:3:4:5:6
::2:3:4:5
::2:3:4
::2:3
::8
1:2:3:4:5:6::
1:2:3:4:5::
1:2:3:4::
1:2:3::
1:2::
1::
1:2:3:4:5::7:8
2001:0000:1234:0000:0000:C1C0:ABCD:0876
1:2:3:4::7:8
1:2:3::7:8
1:2::7:8
1::7:8
fe80::217:f2ff:fe07:ed62
2001:DB8:0:0:8:800:200C:417A
FF01:0:0:0:0:0:0:101
0:0:0:0:0:0:0:1
0:0:0:0:0:0:0:0
2001:DB8::8:800:200C:417A
FF01::101
::1
fe80:0000:0000:0000:0204:61ff:fe9d:f156
fe80:0:0:0:204:61ff:fe9d:f156
fe80::204:61ff:fe9d:f156
fe80::
fe80::1
0000:0000:0000:0000:0000:0000:0000:0001
::1
::ffff:c000:280
::>
        {ok Net::Netmask.new($_), "ok $_"; }



for
<:
2001:0000:1234: 0000:0000:C1C0:ABCD:0876
02001:0000:1234:0000:0000:C1C0:ABCD:0876
2001:0000:1234:0000:00001:C1C0:ABCD:0876
3ffe:0b00:0000:0001:0000:0000:000a
FF02:0000:0000:0000:0000:0000:0000:0000:0001
3ffe:b00::1::a
::1111:2222:3333:4444:5555:6666::
1:2:3::4:5::7:8
12345::6:7:8
1::5:400.2.3.4
1::5:260.2.3.4
1::5:256.2.3.4
1::5:1.256.3.4
1::5:1.2.256.4
1::5:1.2.3.256
1::5:300.2.3.4
1::5:1.300.3.4
1::5:1.2.300.4
1::5:1.2.3.300
1::5:900.2.3.4
1::5:1.900.3.4
1::5:1.2.900.4
1::5:1.2.3.900
1::5:300.300.300.300
1::5:3000.30.30.30
1::400.2.3.4
1::260.2.3.4
1::256.2.3.4
1::1.256.3.4
1::1.2.256.4
1::1.2.3.256
1::300.2.3.4
1::1.300.3.4
1::1.2.300.4
1::1.2.3.300
1::900.2.3.4
1::1.900.3.4
1::1.2.900.4
1::1.2.3.900
1::300.300.300.300
1::3000.30.30.30
::400.2.3.4
::260.2.3.4
::256.2.3.4
::1.256.3.4
::1.2.256.4
::1.2.3.256
::300.2.3.4
::1.300.3.4
::1.2.300.4
::1.2.3.300
::900.2.3.4
::1.900.3.4
::1.2.900.4
::1.2.3.900
::300.300.300.300
::3000.30.30.30
1:2:3:4:5:6:1.2.3.4
2001:DB8:0:0:8:800:200C:417A:221
FF01::101::2
1111:2222:3333:4444::5555:
1111:2222:3333::5555:
1111:2222::5555:
1111::5555:
::5555:
:::
1111:
:
:1111:2222:3333:4444::5555
:1111:2222:3333::5555
:1111:2222::5555
:1111::5555
:::5555
:::
1.2.3.4:1111:2222:3333:4444::5555
1.2.3.4:1111:2222:3333::5555
1.2.3.4:1111:2222::5555
1.2.3.4:1111::5555
1.2.3.4::5555
1.2.3.4::
123
ldkfj
2001::FFD3::57ab
2001:db8:85a3::8a2e:37023:7334
2001:db8:85a3::8a2e:370k:7334
1:2:3:4:5:6:7:8:9
1::2::3
1:::3:4:5
1:2:3::4:5:6:7:8:9
::ffff:2.3.4
::ffff:257.1.2.3>
{ dies-ok {Net::Netmask.new($_)}, "notok $_"}


done-testing;



