'use strict' import test from 'ava' import cidr, { cidrv4, cidrv6 } from '../src' const v4 = [ '0.0.0.0/16', '8.8.8.8/17', '127.0.0.1/18', '100.100.100.100/19', '192.168.0.1/20', '18.101.25.153/24', '123.23.34.2/25', '172.26.168.134/26', '212.58.241.131/27', '128.0.0.0/28', '23.71.254.72/29', '223.255.255.255/30', '192.0.2.235/31', '99.198.122.146/32', '46.51.197.88/8', '173.194.34.134/12' ] const v4not = [ '.100.100.100.100/16', '100..100.100.100./24', '100.100.100.100./32', '999.999.999.999/12', '256.256.256.256/30', '256.100.100.100.100/26', '123.123.123/31', 'http://123.123.123/28', '1000.2.3.4/14', '999.2.3.4/8' ] const v6 = [ 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/0', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/1', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/2', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/3', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/11', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/99', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/100', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/126', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/127', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/128', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156', // test cases from Dartware IPv6 Regex '::1', '::', '0:0:0:0:0:0:0:1', '0:0:0:0:0:0:0:0', '2001:DB8:0:0:8:800:200C:417A', 'FF01:0:0:0:0:0:0:101', '2001:DB8::8:800:200C:417A', 'FF01::101', 'fe80::217:f2ff:fe07:ed62', '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', '2001:0000:1234:0000:0000:C1C0:ABCD:0876', '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', '1:2:3:4::7:8', '1:2:3::7:8', '1:2::7:8', '1::7:8', '1:2:3:4:5:6:1.2.3.4', '1:2:3:4:5::1.2.3.4', '1:2:3:4::1.2.3.4', '1:2:3::1.2.3.4', '1:2::1.2.3.4', '1::1.2.3.4', '1:2:3:4::5:1.2.3.4', '1:2:3::5:1.2.3.4', '1:2::5:1.2.3.4', '1::5:1.2.3.4', '1::5:11.22.33.44', 'fe80::217:f2ff:254.7.237.98', '::ffff:192.168.1.26', '::ffff:192.168.1.1', '0:0:0:0:0:0:13.1.68.3', '0:0:0:0:0:FFFF:129.144.52.38', '::13.1.68.3', '::FFFF:129.144.52.38', 'fe80:0:0:0:204:61ff:254.157.241.86', 'fe80::204:61ff:254.157.241.86', '::ffff:12.34.56.78', '::ffff:192.0.2.128', '2001:0DB8:0000:CD30:0000:0000:0000:0000/60', '2001:0DB8::CD30:0:0:0:0/60', '2001:0DB8:0:CD30::/60', '::/128', '::1/128', 'FF00::/8', 'FE80::/10', 'FEC0::/10', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156', 'fe80:0:0:0:204:61ff:fe9d:f156', 'fe80::204:61ff:fe9d:f156', '::1', 'fe80::', 'fe80::1', '::ffff:c000:280', '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', '0000:0000:0000:0000:0000:0000:0000:0001', '::1', '::ffff:0c22:384e', '2001:0db8:1234:0000:0000:0000:0000:0000', '2001:0db8:1234:ffff:ffff:ffff:ffff:ffff', '2001:db8:a::123', 'fe80::', '1111:2222:3333:4444:5555:6666:7777:8888', '1111:2222:3333:4444:5555:6666:7777::', '1111:2222:3333:4444:5555:6666::', '1111:2222:3333:4444:5555::', '1111:2222:3333:4444::', '1111:2222:3333::', '1111:2222::', '1111::', '::', '1111:2222:3333:4444:5555:6666::8888', '1111:2222:3333:4444:5555::8888', '1111:2222:3333:4444::8888', '1111:2222:3333::8888', '1111:2222::8888', '1111::8888', '::8888', '1111:2222:3333:4444:5555::7777:8888', '1111:2222:3333:4444::7777:8888', '1111:2222:3333::7777:8888', '1111:2222::7777:8888', '1111::7777:8888', '::7777:8888', '1111:2222:3333:4444::6666:7777:8888', '1111:2222:3333::6666:7777:8888', '1111:2222::6666:7777:8888', '1111::6666:7777:8888', '::6666:7777:8888', '1111:2222:3333::5555:6666:7777:8888', '1111:2222::5555:6666:7777:8888', '1111::5555:6666:7777:8888', '::5555:6666:7777:8888', '1111:2222::4444:5555:6666:7777:8888', '1111::4444:5555:6666:7777:8888', '::4444:5555:6666:7777:8888', '1111::3333:4444:5555:6666:7777:8888', '::3333:4444:5555:6666:7777:8888', '::2222:3333:4444:5555:6666:7777:8888', '1111:2222:3333:4444:5555:6666:123.123.123.123', '1111:2222:3333:4444:5555::123.123.123.123', '1111:2222:3333:4444::123.123.123.123', '1111:2222:3333::123.123.123.123', '1111:2222::123.123.123.123', '1111::123.123.123.123', '::123.123.123.123', '1111:2222:3333:4444::6666:123.123.123.123', '1111:2222:3333::6666:123.123.123.123', '1111:2222::6666:123.123.123.123', '1111::6666:123.123.123.123', '::6666:123.123.123.123', '1111:2222:3333::5555:6666:123.123.123.123', '1111:2222::5555:6666:123.123.123.123', '1111::5555:6666:123.123.123.123', '::5555:6666:123.123.123.123', '1111:2222::4444:5555:6666:123.123.123.123', '1111::4444:5555:6666:123.123.123.123', '::4444:5555:6666:123.123.123.123', '1111::3333:4444:5555:6666:123.123.123.123', '::2222:3333:4444:5555:6666:123.123.123.123', '::0:0:0:0:0:0:0', '::0:0:0:0:0:0', '::0:0:0:0:0', '::0:0:0:0', '::0:0:0', '::0:0', '::0', '0:0:0:0:0:0:0::', '0:0:0:0:0:0::', '0:0:0:0:0::', '0:0:0:0::', '0:0:0::', '0:0::', '0::', '0:a:b:c:d:e:f::', '::0:a:b:c:d:e:f', 'a:b:c:d:e:f:0::' ] const v6not = [ 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/129', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/a', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/√', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/00', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/03', 'fe80:0000:0000:0000:0204:61ff:fe9d:f156/sdfsdfs', 'sssssss::sssssss', // test for regression of badly escaped regex // test cases from Dartware IPv6 Regex '2001:DB8:0:0:8:800:200C:417A:221', 'FF01::101::2', '02001:0000:1234:0000:0000:C1C0:ABCD:0876', '2001:0000:1234:0000:00001:C1C0:ABCD:0876', '2001:0000:1234:0000:0000:C1C0:ABCD:0876 0', '2001:0000:1234: 0000:0000: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', '2001:1:1:1:1:1:255Z255X255Y255', '::ffff:192x168.1.26', '::ffff:2.3.4', '::ffff:257.1.2.3', '1.2.3.4', '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::', 'fe80:0000:0000:0000:0204:61ff:254.157.241.086', 'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:1.2.3.4', '1111:2222:3333:4444:5555:6666:00.00.00.00', '1111:2222:3333:4444:5555:6666:000.000.000.000', '1111:2222:3333:4444:5555:6666:256.256.256.256', '124.15.6.89/60', ':', '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', ':::', '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', 'XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX', '1111:2222:3333:4444:5555:6666:7777:8888:9999', '1111:2222:3333:4444:5555:6666:7777:8888::', '::2222:3333:4444:5555:6666:7777:8888:9999', '1111:2222:3333:4444:5555:6666:7777', '1111:2222:3333:4444:5555:6666', '1111:2222:3333:4444:5555', '1111:2222:3333:4444', '1111:2222:3333', '1111:2222', '1111', '11112222:3333:4444:5555:6666:7777:8888', '1111:22223333:4444:5555:6666:7777:8888', '1111:2222:33334444:5555:6666:7777:8888', '1111:2222:3333:44445555:6666:7777:8888', '1111:2222:3333:4444:55556666:7777:8888', '1111:2222:3333:4444:5555:66667777:8888', '1111:2222:3333:4444:5555:6666:77778888', '1111:2222:3333:4444:5555:6666:7777:8888:', '1111:2222:3333:4444:5555:6666:7777:', '1111:2222:3333:4444:5555:6666:', '1111:2222:3333:4444:5555:', '1111:2222:3333:4444:', '1111:2222:3333:', '1111:2222:', '1111:', ':', ':8888', ':7777:8888', ':6666:7777:8888', ':5555:6666:7777:8888', ':4444:5555:6666:7777:8888', ':3333:4444:5555:6666:7777:8888', ':2222:3333:4444:5555:6666:7777:8888', ':1111:2222:3333:4444:5555:6666:7777:8888', ':::2222:3333:4444:5555:6666:7777:8888', '1111:::3333:4444:5555:6666:7777:8888', '1111:2222:::4444:5555:6666:7777:8888', '1111:2222:3333:::5555:6666:7777:8888', '1111:2222:3333:4444:::6666:7777:8888', '1111:2222:3333:4444:5555:::7777:8888', '1111:2222:3333:4444:5555:6666:::8888', '1111:2222:3333:4444:5555:6666:7777:::', '::2222::4444:5555:6666:7777:8888', '::2222:3333::5555:6666:7777:8888', '::2222:3333:4444::6666:7777:8888', '::2222:3333:4444:5555::7777:8888', '::2222:3333:4444:5555:7777::8888', '::2222:3333:4444:5555:7777:8888::', '1111::3333::5555:6666:7777:8888', '1111::3333:4444::6666:7777:8888', '1111::3333:4444:5555::7777:8888', '1111::3333:4444:5555:6666::8888', '1111::3333:4444:5555:6666:7777::', '1111:2222::4444::6666:7777:8888', '1111:2222::4444:5555::7777:8888', '1111:2222::4444:5555:6666::8888', '1111:2222::4444:5555:6666:7777::', '1111:2222:3333::5555::7777:8888', '1111:2222:3333::5555:6666::8888', '1111:2222:3333::5555:6666:7777::', '1111:2222:3333:4444::6666::8888', '1111:2222:3333:4444::6666:7777::', '1111:2222:3333:4444:5555::7777::', '1111:2222:3333:4444:5555:6666:7777:8888:1.2.3.4', '1111:2222:3333:4444:5555:6666:7777:1.2.3.4', '1111:2222:3333:4444:5555:6666::1.2.3.4', '::2222:3333:4444:5555:6666:7777:1.2.3.4', '1111:2222:3333:4444:5555:6666:1.2.3.4.5', '1111:2222:3333:4444:5555:1.2.3.4', '1111:2222:3333:4444:1.2.3.4', '1111:2222:3333:1.2.3.4', '1111:2222:1.2.3.4', '1111:1.2.3.4', '1.2.3.4', '11112222:3333:4444:5555:6666:1.2.3.4', '1111:22223333:4444:5555:6666:1.2.3.4', '1111:2222:33334444:5555:6666:1.2.3.4', '1111:2222:3333:44445555:6666:1.2.3.4', '1111:2222:3333:4444:55556666:1.2.3.4', '1111:2222:3333:4444:5555:66661.2.3.4', '1111:2222:3333:4444:5555:6666:255255.255.255', '1111:2222:3333:4444:5555:6666:255.255255.255', '1111:2222:3333:4444:5555:6666:255.255.255255', ':1.2.3.4', ':6666:1.2.3.4', ':5555:6666:1.2.3.4', ':4444:5555:6666:1.2.3.4', ':3333:4444:5555:6666:1.2.3.4', ':2222:3333:4444:5555:6666:1.2.3.4', ':1111:2222:3333:4444:5555:6666:1.2.3.4', ':::2222:3333:4444:5555:6666:1.2.3.4', '1111:::3333:4444:5555:6666:1.2.3.4', '1111:2222:::4444:5555:6666:1.2.3.4', '1111:2222:3333:::5555:6666:1.2.3.4', '1111:2222:3333:4444:::6666:1.2.3.4', '1111:2222:3333:4444:5555:::1.2.3.4', '::2222::4444:5555:6666:1.2.3.4', '::2222:3333::5555:6666:1.2.3.4', '::2222:3333:4444::6666:1.2.3.4', '::2222:3333:4444:5555::1.2.3.4', '1111::3333::5555:6666:1.2.3.4', '1111::3333:4444::6666:1.2.3.4', '1111::3333:4444:5555::1.2.3.4', '1111:2222::4444::6666:1.2.3.4', '1111:2222::4444:5555::1.2.3.4', '1111:2222:3333::5555::1.2.3.4', '::.', '::..', '::...', '::1...', '::1.2..', '::1.2.3.', '::.2..', '::.2.3.', '::.2.3.4', '::..3.', '::..3.4', '::...4', ':1111:2222:3333:4444:5555:6666:7777::', ':1111:2222:3333:4444:5555:6666::', ':1111:2222:3333:4444:5555::', ':1111:2222:3333:4444::', ':1111:2222:3333::', ':1111:2222::', ':1111::', ':::', ':1111:2222:3333:4444:5555:6666::8888', ':1111:2222:3333:4444:5555::8888', ':1111:2222:3333:4444::8888', ':1111:2222:3333::8888', ':1111:2222::8888', ':1111::8888', ':::8888', ':1111:2222:3333:4444:5555::7777:8888', ':1111:2222:3333:4444::7777:8888', ':1111:2222:3333::7777:8888', ':1111:2222::7777:8888', ':1111::7777:8888', ':::7777:8888', ':1111:2222:3333:4444::6666:7777:8888', ':1111:2222:3333::6666:7777:8888', ':1111:2222::6666:7777:8888', ':1111::6666:7777:8888', ':::6666:7777:8888', ':1111:2222:3333::5555:6666:7777:8888', ':1111:2222::5555:6666:7777:8888', ':1111::5555:6666:7777:8888', ':::5555:6666:7777:8888', ':1111:2222::4444:5555:6666:7777:8888', ':1111::4444:5555:6666:7777:8888', ':::4444:5555:6666:7777:8888', ':1111::3333:4444:5555:6666:7777:8888', ':::3333:4444:5555:6666:7777:8888', ':::2222:3333:4444:5555:6666:7777:8888', ':1111:2222:3333:4444:5555:6666:1.2.3.4', ':1111:2222:3333:4444:5555::1.2.3.4', ':1111:2222:3333:4444::1.2.3.4', ':1111:2222:3333::1.2.3.4', ':1111:2222::1.2.3.4', ':1111::1.2.3.4', ':::1.2.3.4', ':1111:2222:3333:4444::6666:1.2.3.4', ':1111:2222:3333::6666:1.2.3.4', ':1111:2222::6666:1.2.3.4', ':1111::6666:1.2.3.4', ':::6666:1.2.3.4', ':1111:2222:3333::5555:6666:1.2.3.4', ':1111:2222::5555:6666:1.2.3.4', ':1111::5555:6666:1.2.3.4', ':::5555:6666:1.2.3.4', ':1111:2222::4444:5555:6666:1.2.3.4', ':1111::4444:5555:6666:1.2.3.4', ':::4444:5555:6666:1.2.3.4', ':1111::3333:4444:5555:6666:1.2.3.4', ':::2222:3333:4444:5555:6666:1.2.3.4', '1111:2222:3333:4444:5555:6666:7777:::', '1111:2222:3333:4444:5555:6666:::', '1111:2222:3333:4444:5555:::', '1111:2222:3333:4444:::', '1111:2222:3333:::', '1111:2222:::', '1111:::', ':::', '1111:2222:3333:4444:5555:6666::8888:', '1111:2222:3333:4444:5555::8888:', '1111:2222:3333:4444::8888:', '1111:2222:3333::8888:', '1111:2222::8888:', '1111::8888:', '::8888:', '1111:2222:3333:4444:5555::7777:8888:', '1111:2222:3333:4444::7777:8888:', '1111:2222:3333::7777:8888:', '1111:2222::7777:8888:', '1111::7777:8888:', '::7777:8888:', '1111:2222:3333:4444::6666:7777:8888:', '1111:2222:3333::6666:7777:8888:', '1111:2222::6666:7777:8888:', '1111::6666:7777:8888:', '::6666:7777:8888:', '1111:2222:3333::5555:6666:7777:8888:', '1111:2222::5555:6666:7777:8888:', '1111::5555:6666:7777:8888:', '::5555:6666:7777:8888:', '1111:2222::4444:5555:6666:7777:8888:', '1111::4444:5555:6666:7777:8888:', '::4444:5555:6666:7777:8888:', '1111::3333:4444:5555:6666:7777:8888:', '::3333:4444:5555:6666:7777:8888:', '::2222:3333:4444:5555:6666:7777:8888:', '\':10.0.0.1' ] test('cidr v4', (t) => { v4.forEach((string) => { t.true(cidr.test(string)) }) v4not.forEach((string) => { t.false(cidrv4.test(string)) }) }) test('cidr v6', (t) => { v6.forEach((string) => { t.true(cidrv6.test(string)) }) v6not.forEach((string) => { t.false(cidrv6.test(string)) }) })