summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:15:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:15:13 +0000
commit5fb98df7b32417914e9b282e91987199416d0a97 (patch)
treed674271dc3d99faa1a75fa689888ee3d3aec4e10 /tests
parentInitial commit. (diff)
downloadipcalc-ng-5fb98df7b32417914e9b282e91987199416d0a97.tar.xz
ipcalc-ng-5fb98df7b32417914e9b282e91987199416d0a97.zip
Adding upstream version 1.0.3.upstream/1.0.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/12.15.1.55
-rw-r--r--tests/129.15.31.55
-rw-r--r--tests/192.168.1.5-165
-rw-r--r--tests/192.168.1.5-245
-rw-r--r--tests/192.168.1.5-305
-rw-r--r--tests/192.168.1.5-315
-rw-r--r--tests/192.168.1.5-85
-rw-r--r--tests/192.168.2.68
-rw-r--r--tests/192.168.2.78
-rw-r--r--tests/193.92.150.3-246
-rw-r--r--tests/193.92.31.05
-rw-r--r--tests/all-info-192.168.2.711
-rw-r--r--tests/deaggregate-192.168.2.0-192.168.3.2552
-rw-r--r--tests/deaggregate-192.168.2.33-192.168.3.212
-rw-r--r--tests/deaggregate-192.168.2.7-192.168.2.133
-rw-r--r--tests/deaggregate-2a03:2880:20:4f06:face::0-2a03:2880:20:4f06:face::fffe16
-rw-r--r--tests/deaggregate-fcd3:57d1:733:c18f:b498:25e1:788:0-fcd3:57d1:733:c18f:b498:25e1:788:ffff2
-rw-r--r--tests/deaggregate-fcd3:57d1:733:c18f:b498:25e1:788:f-fcd3:57d1:733:c18f:b498:25e1:789:ffa928
-rw-r--r--tests/fd0b:a336:4e7d::-485
-rw-r--r--tests/fd95:6be5:0ae0:84a5::-645
-rw-r--r--tests/hostname-localhost-ipv41
-rw-r--r--tests/hostname-localhost-ipv4-json11
-rw-r--r--tests/hostname-localhost-ipv61
-rw-r--r--tests/i-0.0.0.12
-rw-r--r--tests/i-10.0.0.12
-rw-r--r--tests/i-100.64.0.12
-rw-r--r--tests/i-127.0.0.12
-rw-r--r--tests/i-127.0.1.12
-rw-r--r--tests/i-169.254.0.12
-rw-r--r--tests/i-172.16.0.12
-rw-r--r--tests/i-172.31.255.2542
-rw-r--r--tests/i-192.0.0.12
-rw-r--r--tests/i-192.0.0.102
-rw-r--r--tests/i-192.0.0.1702
-rw-r--r--tests/i-192.0.0.1712
-rw-r--r--tests/i-192.0.0.2542
-rw-r--r--tests/i-192.0.0.62
-rw-r--r--tests/i-192.0.0.82
-rw-r--r--tests/i-192.0.0.92
-rw-r--r--tests/i-192.0.2.12
-rw-r--r--tests/i-192.168.0.12
-rw-r--r--tests/i-192.175.48.122
-rw-r--r--tests/i-192.31.196.12
-rw-r--r--tests/i-192.52.193.52
-rw-r--r--tests/i-192.88.99.12
-rw-r--r--tests/i-198.18.0.12
-rw-r--r--tests/i-198.19.201.712
-rw-r--r--tests/i-198.19.255.2542
-rw-r--r--tests/i-198.51.100.12
-rw-r--r--tests/i-2001:0:50::d78a:0:c3
-rw-r--r--tests/i-2001:190:70::e86a:0:b3
-rw-r--r--tests/i-2001:1::13
-rw-r--r--tests/i-2001:1::23
-rw-r--r--tests/i-2001:1e:ab:7::3
-rw-r--r--tests/i-2001:2:0:a::5:b7f3
-rw-r--r--tests/i-2001:2c:ab:7::3
-rw-r--r--tests/i-2001:3:89:71::ab:13
-rw-r--r--tests/i-2001:4:112::6483:bd12:90103
-rw-r--r--tests/i-2001:db8:329::4a3
-rw-r--r--tests/i-2002::343
-rw-r--r--tests/i-203.0.113.12
-rw-r--r--tests/i-224.0.0.12
-rw-r--r--tests/i-240.0.0.12
-rw-r--r--tests/i-250.7.93.12
-rw-r--r--tests/i-255.255.255.2542
-rw-r--r--tests/i-255.255.255.2552
-rw-r--r--tests/i-2620:4f:8000::7372:ad13
-rw-r--r--tests/i-2a03:2880:20:4f06:face:b00c:0:13
-rw-r--r--tests/i-3.130.45.152
-rw-r--r--tests/i-64:ff9b:1:ea21:4316:55::13
-rw-r--r--tests/i-64:ff9b::2100:951a3
-rw-r--r--tests/i-fc00:0:a001::bcdf:43
-rw-r--r--tests/i-fd0b:a336:4e7d::-488
-rw-r--r--tests/i-fe80::b:0:7acd:0:53
-rw-r--r--tests/info-192.168.2.79
-rw-r--r--tests/ip-localhost-ipv41
-rw-r--r--tests/ip-localhost-ipv4-json12
-rw-r--r--tests/ip-localhost-ipv61
-rwxr-xr-xtests/ipcalc-delegate-ipv6-random.sh33
-rwxr-xr-xtests/ipcalc-delegate-split-ipv4.sh42
-rwxr-xr-xtests/ipcalc-delegate-split-ipv6.sh42
-rwxr-xr-xtests/ipcalc-testrunner.sh86
-rw-r--r--tests/json-i-2a03:2880:20:4f06:face:b00c:0:1-5612
-rw-r--r--tests/json-nsplit-10.10.10.0-16-24261
-rw-r--r--tests/json-nsplit-192.168.5.45-24-269
-rw-r--r--tests/json-nsplit-2a03:2880:20:4f06:face::-56-64261
-rw-r--r--tests/json-split-10.10.10.0-16-24261
-rw-r--r--tests/json-split-192.168.5.45-24-269
-rw-r--r--tests/json-split-2a03:2880:20:4f06:face::-56-64261
-rw-r--r--tests/meson.build1330
-rw-r--r--tests/no-decorate-192.168.2.0-248
-rw-r--r--tests/no-decorate-all-info-192.168.2.0-2410
-rw-r--r--tests/nsplit-10.10.10.0-16-184
-rw-r--r--tests/nsplit-10.10.10.0-16-24256
-rw-r--r--tests/nsplit-192.168.5.0-24-2932
-rw-r--r--tests/nsplit-192.168.5.0-24-31128
-rw-r--r--tests/nsplit-192.168.5.0-24-32256
-rw-r--r--tests/nsplit-192.168.5.0-31-322
-rw-r--r--tests/nsplit-192.168.5.45-24-264
-rw-r--r--tests/nsplit-2a03:2880:20:4f06:face::-56-64256
-rw-r--r--tests/nsplit-fcfa:b4ca:f1d8:125b:dc00::-112-120256
-rw-r--r--tests/nsplit-fcfa:b4ca:f1d8:125b:dc00::-127-1282
-rwxr-xr-xtests/run-coverage.sh4
-rw-r--r--tests/split-10.10.10.0-16-188
-rw-r--r--tests/split-10.10.10.0-16-24260
-rw-r--r--tests/split-192.168.5.0-24-2936
-rw-r--r--tests/split-192.168.5.0-24-31132
-rw-r--r--tests/split-192.168.5.0-24-32260
-rw-r--r--tests/split-192.168.5.0-31-326
-rw-r--r--tests/split-192.168.5.45-24-268
-rw-r--r--tests/split-2a03:2880:20:4f06:face::-56-64260
-rw-r--r--tests/split-fcfa:b4ca:f1d8:125b:dc00::-112-120260
-rw-r--r--tests/split-fcfa:b4ca:f1d8:125b:dc00::-127-1286
-rw-r--r--tests/standard-192.168.2.0-248
114 files changed, 5376 insertions, 0 deletions
diff --git a/tests/12.15.1.5 b/tests/12.15.1.5
new file mode 100644
index 0000000..8272f43
--- /dev/null
+++ b/tests/12.15.1.5
@@ -0,0 +1,5 @@
+ADDRESS=12.15.1.5
+NETMASK=255.0.0.0
+PREFIX=8
+BROADCAST=12.255.255.255
+NETWORK=12.0.0.0
diff --git a/tests/129.15.31.5 b/tests/129.15.31.5
new file mode 100644
index 0000000..fa4a2df
--- /dev/null
+++ b/tests/129.15.31.5
@@ -0,0 +1,5 @@
+ADDRESS=129.15.31.5
+NETMASK=255.255.0.0
+PREFIX=16
+BROADCAST=129.15.255.255
+NETWORK=129.15.0.0
diff --git a/tests/192.168.1.5-16 b/tests/192.168.1.5-16
new file mode 100644
index 0000000..3d85627
--- /dev/null
+++ b/tests/192.168.1.5-16
@@ -0,0 +1,5 @@
+ADDRESS=10.100.4.1
+NETMASK=255.255.0.0
+PREFIX=16
+BROADCAST=10.100.255.255
+NETWORK=10.100.0.0
diff --git a/tests/192.168.1.5-24 b/tests/192.168.1.5-24
new file mode 100644
index 0000000..498101e
--- /dev/null
+++ b/tests/192.168.1.5-24
@@ -0,0 +1,5 @@
+ADDRESS=10.10.10.5
+NETMASK=255.255.255.0
+PREFIX=24
+BROADCAST=10.10.10.255
+NETWORK=10.10.10.0
diff --git a/tests/192.168.1.5-30 b/tests/192.168.1.5-30
new file mode 100644
index 0000000..3fc77b6
--- /dev/null
+++ b/tests/192.168.1.5-30
@@ -0,0 +1,5 @@
+ADDRESS=10.100.4.1
+NETMASK=255.255.255.252
+PREFIX=30
+BROADCAST=10.100.4.3
+NETWORK=10.100.4.0
diff --git a/tests/192.168.1.5-31 b/tests/192.168.1.5-31
new file mode 100644
index 0000000..a56422c
--- /dev/null
+++ b/tests/192.168.1.5-31
@@ -0,0 +1,5 @@
+ADDRESS=192.168.1.5
+NETMASK=255.255.255.254
+PREFIX=31
+BROADCAST=255.255.255.255
+NETWORK=192.168.1.4
diff --git a/tests/192.168.1.5-8 b/tests/192.168.1.5-8
new file mode 100644
index 0000000..0fe1ef5
--- /dev/null
+++ b/tests/192.168.1.5-8
@@ -0,0 +1,5 @@
+ADDRESS=10.10.10.10
+NETMASK=255.0.0.0
+PREFIX=8
+BROADCAST=10.255.255.255
+NETWORK=10.0.0.0
diff --git a/tests/192.168.2.6 b/tests/192.168.2.6
new file mode 100644
index 0000000..9b642ff
--- /dev/null
+++ b/tests/192.168.2.6
@@ -0,0 +1,8 @@
+ADDRESS=192.168.2.6
+NETMASK=255.255.255.0
+PREFIX=24
+BROADCAST=192.168.2.255
+NETWORK=192.168.2.0
+MINADDR=192.168.2.1
+MAXADDR=192.168.2.254
+ADDRESSES=254
diff --git a/tests/192.168.2.7 b/tests/192.168.2.7
new file mode 100644
index 0000000..c3dc8a9
--- /dev/null
+++ b/tests/192.168.2.7
@@ -0,0 +1,8 @@
+192.168.2.7
+255.255.255.0
+24
+192.168.2.255
+192.168.2.0
+192.168.2.1
+192.168.2.254
+254
diff --git a/tests/193.92.150.3-24 b/tests/193.92.150.3-24
new file mode 100644
index 0000000..2906374
--- /dev/null
+++ b/tests/193.92.150.3-24
@@ -0,0 +1,6 @@
+ADDRESS=193.92.150.3
+NETMASK=255.255.255.0
+PREFIX=24
+BROADCAST=193.92.150.255
+NETWORK=193.92.150.0
+ADDRSPACE=Internet
diff --git a/tests/193.92.31.0 b/tests/193.92.31.0
new file mode 100644
index 0000000..a1b582e
--- /dev/null
+++ b/tests/193.92.31.0
@@ -0,0 +1,5 @@
+ADDRESS=193.92.31.0
+NETMASK=255.255.255.0
+PREFIX=24
+BROADCAST=193.92.31.255
+NETWORK=193.92.31.0
diff --git a/tests/all-info-192.168.2.7 b/tests/all-info-192.168.2.7
new file mode 100644
index 0000000..de80084
--- /dev/null
+++ b/tests/all-info-192.168.2.7
@@ -0,0 +1,11 @@
+Address: 192.168.2.7
+Network: 192.168.2.0/24
+Netmask: 255.255.255.0 = 24
+Broadcast: 192.168.2.255
+Reverse DNS: 2.168.192.in-addr.arpa.
+
+Address space: Private Use
+Address class: Class C
+HostMin: 192.168.2.1
+HostMax: 192.168.2.254
+Hosts/Net: 254
diff --git a/tests/deaggregate-192.168.2.0-192.168.3.255 b/tests/deaggregate-192.168.2.0-192.168.3.255
new file mode 100644
index 0000000..a4b77e0
--- /dev/null
+++ b/tests/deaggregate-192.168.2.0-192.168.3.255
@@ -0,0 +1,2 @@
+[Deaggregated networks]
+Network: 192.168.2.0/23
diff --git a/tests/deaggregate-192.168.2.33-192.168.3.2 b/tests/deaggregate-192.168.2.33-192.168.3.2
new file mode 100644
index 0000000..c95f330
--- /dev/null
+++ b/tests/deaggregate-192.168.2.33-192.168.3.2
@@ -0,0 +1,12 @@
+{
+ "DEAGGREGATEDNETWORK":[
+ "192.168.2.33/32",
+ "192.168.2.34/31",
+ "192.168.2.36/30",
+ "192.168.2.40/29",
+ "192.168.2.48/28",
+ "192.168.2.64/26",
+ "192.168.2.128/25",
+ "192.168.3.0/31",
+ "192.168.3.2/32"]
+}
diff --git a/tests/deaggregate-192.168.2.7-192.168.2.13 b/tests/deaggregate-192.168.2.7-192.168.2.13
new file mode 100644
index 0000000..ee382f7
--- /dev/null
+++ b/tests/deaggregate-192.168.2.7-192.168.2.13
@@ -0,0 +1,3 @@
+192.168.2.7/32
+192.168.2.8/30
+192.168.2.12/31
diff --git a/tests/deaggregate-2a03:2880:20:4f06:face::0-2a03:2880:20:4f06:face::fffe b/tests/deaggregate-2a03:2880:20:4f06:face::0-2a03:2880:20:4f06:face::fffe
new file mode 100644
index 0000000..ae5782b
--- /dev/null
+++ b/tests/deaggregate-2a03:2880:20:4f06:face::0-2a03:2880:20:4f06:face::fffe
@@ -0,0 +1,16 @@
+2a03:2880:20:4f06:face::/113
+2a03:2880:20:4f06:face::8000/114
+2a03:2880:20:4f06:face::c000/115
+2a03:2880:20:4f06:face::e000/116
+2a03:2880:20:4f06:face::f000/117
+2a03:2880:20:4f06:face::f800/118
+2a03:2880:20:4f06:face::fc00/119
+2a03:2880:20:4f06:face::fe00/120
+2a03:2880:20:4f06:face::ff00/121
+2a03:2880:20:4f06:face::ff80/122
+2a03:2880:20:4f06:face::ffc0/123
+2a03:2880:20:4f06:face::ffe0/124
+2a03:2880:20:4f06:face::fff0/125
+2a03:2880:20:4f06:face::fff8/126
+2a03:2880:20:4f06:face::fffc/127
+2a03:2880:20:4f06:face::fffe/128
diff --git a/tests/deaggregate-fcd3:57d1:733:c18f:b498:25e1:788:0-fcd3:57d1:733:c18f:b498:25e1:788:ffff b/tests/deaggregate-fcd3:57d1:733:c18f:b498:25e1:788:0-fcd3:57d1:733:c18f:b498:25e1:788:ffff
new file mode 100644
index 0000000..3731c48
--- /dev/null
+++ b/tests/deaggregate-fcd3:57d1:733:c18f:b498:25e1:788:0-fcd3:57d1:733:c18f:b498:25e1:788:ffff
@@ -0,0 +1,2 @@
+[Deaggregated networks]
+Network: fcd3:57d1:733:c18f:b498:25e1:788:0/112
diff --git a/tests/deaggregate-fcd3:57d1:733:c18f:b498:25e1:788:f-fcd3:57d1:733:c18f:b498:25e1:789:ffa9 b/tests/deaggregate-fcd3:57d1:733:c18f:b498:25e1:788:f-fcd3:57d1:733:c18f:b498:25e1:789:ffa9
new file mode 100644
index 0000000..d2bbed3
--- /dev/null
+++ b/tests/deaggregate-fcd3:57d1:733:c18f:b498:25e1:788:f-fcd3:57d1:733:c18f:b498:25e1:789:ffa9
@@ -0,0 +1,28 @@
+{
+ "DEAGGREGATEDNETWORK":[
+ "fcd3:57d1:733:c18f:b498:25e1:788:f/128",
+ "fcd3:57d1:733:c18f:b498:25e1:788:10/124",
+ "fcd3:57d1:733:c18f:b498:25e1:788:20/123",
+ "fcd3:57d1:733:c18f:b498:25e1:788:40/122",
+ "fcd3:57d1:733:c18f:b498:25e1:788:80/121",
+ "fcd3:57d1:733:c18f:b498:25e1:788:100/120",
+ "fcd3:57d1:733:c18f:b498:25e1:788:200/119",
+ "fcd3:57d1:733:c18f:b498:25e1:788:400/118",
+ "fcd3:57d1:733:c18f:b498:25e1:788:800/117",
+ "fcd3:57d1:733:c18f:b498:25e1:788:1000/116",
+ "fcd3:57d1:733:c18f:b498:25e1:788:2000/115",
+ "fcd3:57d1:733:c18f:b498:25e1:788:4000/114",
+ "fcd3:57d1:733:c18f:b498:25e1:788:8000/113",
+ "fcd3:57d1:733:c18f:b498:25e1:789:0/113",
+ "fcd3:57d1:733:c18f:b498:25e1:789:8000/114",
+ "fcd3:57d1:733:c18f:b498:25e1:789:c000/115",
+ "fcd3:57d1:733:c18f:b498:25e1:789:e000/116",
+ "fcd3:57d1:733:c18f:b498:25e1:789:f000/117",
+ "fcd3:57d1:733:c18f:b498:25e1:789:f800/118",
+ "fcd3:57d1:733:c18f:b498:25e1:789:fc00/119",
+ "fcd3:57d1:733:c18f:b498:25e1:789:fe00/120",
+ "fcd3:57d1:733:c18f:b498:25e1:789:ff00/121",
+ "fcd3:57d1:733:c18f:b498:25e1:789:ff80/123",
+ "fcd3:57d1:733:c18f:b498:25e1:789:ffa0/125",
+ "fcd3:57d1:733:c18f:b498:25e1:789:ffa8/127"]
+}
diff --git a/tests/fd0b:a336:4e7d::-48 b/tests/fd0b:a336:4e7d::-48
new file mode 100644
index 0000000..8d644d7
--- /dev/null
+++ b/tests/fd0b:a336:4e7d::-48
@@ -0,0 +1,5 @@
+ADDRESS=fd0b:a336:4e7d::
+NETMASK=ffff:ffff:ffff::
+PREFIX=48
+NETWORK=fd0b:a336:4e7d::
+ADDRSPACE="Unique Local Unicast"
diff --git a/tests/fd95:6be5:0ae0:84a5::-64 b/tests/fd95:6be5:0ae0:84a5::-64
new file mode 100644
index 0000000..92de440
--- /dev/null
+++ b/tests/fd95:6be5:0ae0:84a5::-64
@@ -0,0 +1,5 @@
+ADDRESS=fd95:6be5:ae0:84a5::
+NETMASK=ffff:ffff:ffff:ffff::
+PREFIX=64
+NETWORK=fd95:6be5:ae0:84a5::
+ADDRSPACE="Unique Local Unicast"
diff --git a/tests/hostname-localhost-ipv4 b/tests/hostname-localhost-ipv4
new file mode 100644
index 0000000..bc5e5ff
--- /dev/null
+++ b/tests/hostname-localhost-ipv4
@@ -0,0 +1 @@
+ADDRESS=127.0.0.1
diff --git a/tests/hostname-localhost-ipv4-json b/tests/hostname-localhost-ipv4-json
new file mode 100644
index 0000000..563aa6c
--- /dev/null
+++ b/tests/hostname-localhost-ipv4-json
@@ -0,0 +1,11 @@
+{
+ "ADDRESS":"127.0.0.1",
+ "NETWORK":"127.0.0.1",
+ "NETMASK":"255.255.255.255",
+ "PREFIX":"32",
+ "BROADCAST":"127.0.0.1",
+ "ADDRSPACE":"Loopback",
+ "MINADDR":"127.0.0.1",
+ "MAXADDR":"127.0.0.1",
+ "ADDRESSES":"1"
+}
diff --git a/tests/hostname-localhost-ipv6 b/tests/hostname-localhost-ipv6
new file mode 100644
index 0000000..6eca333
--- /dev/null
+++ b/tests/hostname-localhost-ipv6
@@ -0,0 +1 @@
+ADDRESS=::1
diff --git a/tests/i-0.0.0.1 b/tests/i-0.0.0.1
new file mode 100644
index 0000000..2a0daf2
--- /dev/null
+++ b/tests/i-0.0.0.1
@@ -0,0 +1,2 @@
+Address: 0.0.0.1
+Address space: This host on this network
diff --git a/tests/i-10.0.0.1 b/tests/i-10.0.0.1
new file mode 100644
index 0000000..cc96eea
--- /dev/null
+++ b/tests/i-10.0.0.1
@@ -0,0 +1,2 @@
+Address: 10.0.0.1
+Address space: Private Use
diff --git a/tests/i-100.64.0.1 b/tests/i-100.64.0.1
new file mode 100644
index 0000000..81ccbce
--- /dev/null
+++ b/tests/i-100.64.0.1
@@ -0,0 +1,2 @@
+Address: 100.64.0.1
+Address space: Shared Address Space
diff --git a/tests/i-127.0.0.1 b/tests/i-127.0.0.1
new file mode 100644
index 0000000..02155c1
--- /dev/null
+++ b/tests/i-127.0.0.1
@@ -0,0 +1,2 @@
+Address: 127.0.0.1
+Address space: Loopback
diff --git a/tests/i-127.0.1.1 b/tests/i-127.0.1.1
new file mode 100644
index 0000000..7d6f871
--- /dev/null
+++ b/tests/i-127.0.1.1
@@ -0,0 +1,2 @@
+Address: 127.0.1.1
+Address space: Loopback
diff --git a/tests/i-169.254.0.1 b/tests/i-169.254.0.1
new file mode 100644
index 0000000..0f92b14
--- /dev/null
+++ b/tests/i-169.254.0.1
@@ -0,0 +1,2 @@
+Address: 169.254.0.1
+Address space: Link Local
diff --git a/tests/i-172.16.0.1 b/tests/i-172.16.0.1
new file mode 100644
index 0000000..508a71f
--- /dev/null
+++ b/tests/i-172.16.0.1
@@ -0,0 +1,2 @@
+Address: 172.16.0.1
+Address space: Private Use
diff --git a/tests/i-172.31.255.254 b/tests/i-172.31.255.254
new file mode 100644
index 0000000..db339ba
--- /dev/null
+++ b/tests/i-172.31.255.254
@@ -0,0 +1,2 @@
+Address: 172.31.255.254
+Address space: Private Use
diff --git a/tests/i-192.0.0.1 b/tests/i-192.0.0.1
new file mode 100644
index 0000000..14370ef
--- /dev/null
+++ b/tests/i-192.0.0.1
@@ -0,0 +1,2 @@
+Address: 192.0.0.1
+Address space: IETF Protocol Assignments
diff --git a/tests/i-192.0.0.10 b/tests/i-192.0.0.10
new file mode 100644
index 0000000..3e91ba5
--- /dev/null
+++ b/tests/i-192.0.0.10
@@ -0,0 +1,2 @@
+Address: 192.0.0.10
+Address space: Traversal Using Relays around NAT Anycast
diff --git a/tests/i-192.0.0.170 b/tests/i-192.0.0.170
new file mode 100644
index 0000000..ab8584c
--- /dev/null
+++ b/tests/i-192.0.0.170
@@ -0,0 +1,2 @@
+Address: 192.0.0.170
+Address space: NAT64/DNS64 Discovery
diff --git a/tests/i-192.0.0.171 b/tests/i-192.0.0.171
new file mode 100644
index 0000000..7cba65c
--- /dev/null
+++ b/tests/i-192.0.0.171
@@ -0,0 +1,2 @@
+Address: 192.0.0.171
+Address space: NAT64/DNS64 Discovery
diff --git a/tests/i-192.0.0.254 b/tests/i-192.0.0.254
new file mode 100644
index 0000000..03641c2
--- /dev/null
+++ b/tests/i-192.0.0.254
@@ -0,0 +1,2 @@
+Address: 192.0.0.254
+Address space: IETF Protocol Assignments
diff --git a/tests/i-192.0.0.6 b/tests/i-192.0.0.6
new file mode 100644
index 0000000..c30affd
--- /dev/null
+++ b/tests/i-192.0.0.6
@@ -0,0 +1,2 @@
+Address: 192.0.0.6
+Address space: IPv4 Service Continuity Prefix
diff --git a/tests/i-192.0.0.8 b/tests/i-192.0.0.8
new file mode 100644
index 0000000..cc3925b
--- /dev/null
+++ b/tests/i-192.0.0.8
@@ -0,0 +1,2 @@
+Address: 192.0.0.8
+Address space: IPv4 dummy address
diff --git a/tests/i-192.0.0.9 b/tests/i-192.0.0.9
new file mode 100644
index 0000000..52a2513
--- /dev/null
+++ b/tests/i-192.0.0.9
@@ -0,0 +1,2 @@
+Address: 192.0.0.9
+Address space: Port Control Protocol Anycast
diff --git a/tests/i-192.0.2.1 b/tests/i-192.0.2.1
new file mode 100644
index 0000000..9eadfed
--- /dev/null
+++ b/tests/i-192.0.2.1
@@ -0,0 +1,2 @@
+Address: 192.0.2.1
+Address space: Documentation (TEST-NET-1)
diff --git a/tests/i-192.168.0.1 b/tests/i-192.168.0.1
new file mode 100644
index 0000000..366f180
--- /dev/null
+++ b/tests/i-192.168.0.1
@@ -0,0 +1,2 @@
+Address: 192.168.0.1
+Address space: Private Use
diff --git a/tests/i-192.175.48.12 b/tests/i-192.175.48.12
new file mode 100644
index 0000000..a7c1d9f
--- /dev/null
+++ b/tests/i-192.175.48.12
@@ -0,0 +1,2 @@
+Address: 192.175.48.12
+Address space: Direct Delegation AS112 Service
diff --git a/tests/i-192.31.196.1 b/tests/i-192.31.196.1
new file mode 100644
index 0000000..1e817b5
--- /dev/null
+++ b/tests/i-192.31.196.1
@@ -0,0 +1,2 @@
+Address: 192.31.196.1
+Address space: AS112-v4
diff --git a/tests/i-192.52.193.5 b/tests/i-192.52.193.5
new file mode 100644
index 0000000..0eaeacd
--- /dev/null
+++ b/tests/i-192.52.193.5
@@ -0,0 +1,2 @@
+Address: 192.52.193.5
+Address space: AMT
diff --git a/tests/i-192.88.99.1 b/tests/i-192.88.99.1
new file mode 100644
index 0000000..5ddcf09
--- /dev/null
+++ b/tests/i-192.88.99.1
@@ -0,0 +1,2 @@
+Address: 192.88.99.1
+Address space: 6 to 4 Relay Anycast (Deprecated)
diff --git a/tests/i-198.18.0.1 b/tests/i-198.18.0.1
new file mode 100644
index 0000000..472945c
--- /dev/null
+++ b/tests/i-198.18.0.1
@@ -0,0 +1,2 @@
+Address: 198.18.0.1
+Address space: Benchmarking
diff --git a/tests/i-198.19.201.71 b/tests/i-198.19.201.71
new file mode 100644
index 0000000..d91bacc
--- /dev/null
+++ b/tests/i-198.19.201.71
@@ -0,0 +1,2 @@
+Address: 198.19.201.71
+Address space: Benchmarking
diff --git a/tests/i-198.19.255.254 b/tests/i-198.19.255.254
new file mode 100644
index 0000000..9151daf
--- /dev/null
+++ b/tests/i-198.19.255.254
@@ -0,0 +1,2 @@
+Address: 198.19.255.254
+Address space: Benchmarking
diff --git a/tests/i-198.51.100.1 b/tests/i-198.51.100.1
new file mode 100644
index 0000000..1a5ca38
--- /dev/null
+++ b/tests/i-198.51.100.1
@@ -0,0 +1,2 @@
+Address: 198.51.100.1
+Address space: Documentation (TEST-NET-2)
diff --git a/tests/i-2001:0:50::d78a:0:c b/tests/i-2001:0:50::d78a:0:c
new file mode 100644
index 0000000..d69118d
--- /dev/null
+++ b/tests/i-2001:0:50::d78a:0:c
@@ -0,0 +1,3 @@
+Full Address: 2001:0000:0050:0000:0000:d78a:0000:000c
+Address: 2001:0:50::d78a:0:c
+Address space: TEREDO
diff --git a/tests/i-2001:190:70::e86a:0:b b/tests/i-2001:190:70::e86a:0:b
new file mode 100644
index 0000000..d57aecc
--- /dev/null
+++ b/tests/i-2001:190:70::e86a:0:b
@@ -0,0 +1,3 @@
+Full Address: 2001:0190:0070:0000:0000:e86a:0000:000b
+Address: 2001:190:70::e86a:0:b
+Address space: IETF Protocol Assignments
diff --git a/tests/i-2001:1::1 b/tests/i-2001:1::1
new file mode 100644
index 0000000..0d162d0
--- /dev/null
+++ b/tests/i-2001:1::1
@@ -0,0 +1,3 @@
+Full Address: 2001:0001:0000:0000:0000:0000:0000:0001
+Address: 2001:1::1
+Address space: Port Control Protocol Anycast
diff --git a/tests/i-2001:1::2 b/tests/i-2001:1::2
new file mode 100644
index 0000000..2d17f28
--- /dev/null
+++ b/tests/i-2001:1::2
@@ -0,0 +1,3 @@
+Full Address: 2001:0001:0000:0000:0000:0000:0000:0002
+Address: 2001:1::2
+Address space: Traversal Using Relays around NAT Anycast
diff --git a/tests/i-2001:1e:ab:7:: b/tests/i-2001:1e:ab:7::
new file mode 100644
index 0000000..249cb97
--- /dev/null
+++ b/tests/i-2001:1e:ab:7::
@@ -0,0 +1,3 @@
+Full Address: 2001:001e:00ab:0007:0000:0000:0000:0000
+Address: 2001:1e:ab:7::
+Address space: Deprecated (previously ORCHID)
diff --git a/tests/i-2001:2:0:a::5:b7f b/tests/i-2001:2:0:a::5:b7f
new file mode 100644
index 0000000..8057a19
--- /dev/null
+++ b/tests/i-2001:2:0:a::5:b7f
@@ -0,0 +1,3 @@
+Full Address: 2001:0002:0000:000a:0000:0000:0005:0b7f
+Address: 2001:2:0:a::5:b7f
+Address space: Benchmarking
diff --git a/tests/i-2001:2c:ab:7:: b/tests/i-2001:2c:ab:7::
new file mode 100644
index 0000000..c84c2ab
--- /dev/null
+++ b/tests/i-2001:2c:ab:7::
@@ -0,0 +1,3 @@
+Full Address: 2001:002c:00ab:0007:0000:0000:0000:0000
+Address: 2001:2c:ab:7::
+Address space: ORCHIDv2
diff --git a/tests/i-2001:3:89:71::ab:1 b/tests/i-2001:3:89:71::ab:1
new file mode 100644
index 0000000..e7d5408
--- /dev/null
+++ b/tests/i-2001:3:89:71::ab:1
@@ -0,0 +1,3 @@
+Full Address: 2001:0003:0089:0071:0000:0000:00ab:0001
+Address: 2001:3:89:71::ab:1
+Address space: AMT
diff --git a/tests/i-2001:4:112::6483:bd12:9010 b/tests/i-2001:4:112::6483:bd12:9010
new file mode 100644
index 0000000..2f9a45c
--- /dev/null
+++ b/tests/i-2001:4:112::6483:bd12:9010
@@ -0,0 +1,3 @@
+Full Address: 2001:0004:0112:0000:0000:6483:bd12:9010
+Address: 2001:4:112::6483:bd12:9010
+Address space: AS112-v6
diff --git a/tests/i-2001:db8:329::4a b/tests/i-2001:db8:329::4a
new file mode 100644
index 0000000..b94f99d
--- /dev/null
+++ b/tests/i-2001:db8:329::4a
@@ -0,0 +1,3 @@
+Full Address: 2001:0db8:0329:0000:0000:0000:0000:004a
+Address: 2001:db8:329::4a
+Address space: Documentation
diff --git a/tests/i-2002::34 b/tests/i-2002::34
new file mode 100644
index 0000000..421801a
--- /dev/null
+++ b/tests/i-2002::34
@@ -0,0 +1,3 @@
+Full Address: 2002:0000:0000:0000:0000:0000:0000:0034
+Address: 2002::34
+Address space: 6to4
diff --git a/tests/i-203.0.113.1 b/tests/i-203.0.113.1
new file mode 100644
index 0000000..3945b60
--- /dev/null
+++ b/tests/i-203.0.113.1
@@ -0,0 +1,2 @@
+Address: 203.0.113.1
+Address space: Documentation (TEST-NET-3)
diff --git a/tests/i-224.0.0.1 b/tests/i-224.0.0.1
new file mode 100644
index 0000000..723ecf4
--- /dev/null
+++ b/tests/i-224.0.0.1
@@ -0,0 +1,2 @@
+Address: 224.0.0.1
+Address space: Multicast
diff --git a/tests/i-240.0.0.1 b/tests/i-240.0.0.1
new file mode 100644
index 0000000..4a93d4f
--- /dev/null
+++ b/tests/i-240.0.0.1
@@ -0,0 +1,2 @@
+Address: 240.0.0.1
+Address space: Reserved
diff --git a/tests/i-250.7.93.1 b/tests/i-250.7.93.1
new file mode 100644
index 0000000..e78e944
--- /dev/null
+++ b/tests/i-250.7.93.1
@@ -0,0 +1,2 @@
+Address: 250.7.93.1
+Address space: Reserved
diff --git a/tests/i-255.255.255.254 b/tests/i-255.255.255.254
new file mode 100644
index 0000000..61e1e90
--- /dev/null
+++ b/tests/i-255.255.255.254
@@ -0,0 +1,2 @@
+Address: 255.255.255.254
+Address space: Reserved
diff --git a/tests/i-255.255.255.255 b/tests/i-255.255.255.255
new file mode 100644
index 0000000..da812f4
--- /dev/null
+++ b/tests/i-255.255.255.255
@@ -0,0 +1,2 @@
+Address: 255.255.255.255
+Address space: Limited Broadcast
diff --git a/tests/i-2620:4f:8000::7372:ad1 b/tests/i-2620:4f:8000::7372:ad1
new file mode 100644
index 0000000..cd696b6
--- /dev/null
+++ b/tests/i-2620:4f:8000::7372:ad1
@@ -0,0 +1,3 @@
+Full Address: 2620:004f:8000:0000:0000:0000:7372:0ad1
+Address: 2620:4f:8000::7372:ad1
+Address space: Direct Delegation AS112 Service
diff --git a/tests/i-2a03:2880:20:4f06:face:b00c:0:1 b/tests/i-2a03:2880:20:4f06:face:b00c:0:1
new file mode 100644
index 0000000..0405afd
--- /dev/null
+++ b/tests/i-2a03:2880:20:4f06:face:b00c:0:1
@@ -0,0 +1,3 @@
+Full Address: 2a03:2880:0020:4f06:face:b00c:0000:0001
+Address: 2a03:2880:20:4f06:face:b00c:0:1
+Address space: Global Unicast
diff --git a/tests/i-3.130.45.15 b/tests/i-3.130.45.15
new file mode 100644
index 0000000..290d755
--- /dev/null
+++ b/tests/i-3.130.45.15
@@ -0,0 +1,2 @@
+Address: 3.130.45.15
+Address space: Internet
diff --git a/tests/i-64:ff9b:1:ea21:4316:55::1 b/tests/i-64:ff9b:1:ea21:4316:55::1
new file mode 100644
index 0000000..895d9bf
--- /dev/null
+++ b/tests/i-64:ff9b:1:ea21:4316:55::1
@@ -0,0 +1,3 @@
+Full Address: 0064:ff9b:0001:ea21:4316:0055:0000:0001
+Address: 64:ff9b:1:ea21:4316:55:0:1
+Address space: IPv4-IPv6 Translat.
diff --git a/tests/i-64:ff9b::2100:951a b/tests/i-64:ff9b::2100:951a
new file mode 100644
index 0000000..d10f3e7
--- /dev/null
+++ b/tests/i-64:ff9b::2100:951a
@@ -0,0 +1,3 @@
+Full Address: 0064:ff9b:0000:0000:0000:0000:2100:951a
+Address: 64:ff9b::2100:951a
+Address space: IPv4-IPv6 Translat.
diff --git a/tests/i-fc00:0:a001::bcdf:4 b/tests/i-fc00:0:a001::bcdf:4
new file mode 100644
index 0000000..b116df9
--- /dev/null
+++ b/tests/i-fc00:0:a001::bcdf:4
@@ -0,0 +1,3 @@
+Full Address: fc00:0000:a001:0000:0000:0000:bcdf:0004
+Address: fc00:0:a001::bcdf:4
+Address space: Unique Local Unicast
diff --git a/tests/i-fd0b:a336:4e7d::-48 b/tests/i-fd0b:a336:4e7d::-48
new file mode 100644
index 0000000..d2c2e71
--- /dev/null
+++ b/tests/i-fd0b:a336:4e7d::-48
@@ -0,0 +1,8 @@
+Full Network: fd0b:a336:4e7d:0000:0000:0000:0000:0000/48
+Network: fd0b:a336:4e7d::/48
+Netmask: ffff:ffff:ffff:: = 48
+
+Address space: Unique Local Unicast
+HostMin: fd0b:a336:4e7d::
+HostMax: fd0b:a336:4e7d:ffff:ffff:ffff:ffff:ffff
+Hosts/Net: 2^(80) = 1208925819614629174706176
diff --git a/tests/i-fe80::b:0:7acd:0:5 b/tests/i-fe80::b:0:7acd:0:5
new file mode 100644
index 0000000..fc0e55d
--- /dev/null
+++ b/tests/i-fe80::b:0:7acd:0:5
@@ -0,0 +1,3 @@
+Full Address: fe80:0000:0000:000b:0000:7acd:0000:0005
+Address: fe80::b:0:7acd:0:5
+Address space: Link-Scoped Unicast
diff --git a/tests/info-192.168.2.7 b/tests/info-192.168.2.7
new file mode 100644
index 0000000..4d0b0c2
--- /dev/null
+++ b/tests/info-192.168.2.7
@@ -0,0 +1,9 @@
+Address: 192.168.2.7
+Network: 192.168.2.0/24
+Netmask: 255.255.255.0 = 24
+Broadcast: 192.168.2.255
+
+Address space: Private Use
+HostMin: 192.168.2.1
+HostMax: 192.168.2.254
+Hosts/Net: 254
diff --git a/tests/ip-localhost-ipv4 b/tests/ip-localhost-ipv4
new file mode 100644
index 0000000..0b793e2
--- /dev/null
+++ b/tests/ip-localhost-ipv4
@@ -0,0 +1 @@
+HOSTNAME=localhost
diff --git a/tests/ip-localhost-ipv4-json b/tests/ip-localhost-ipv4-json
new file mode 100644
index 0000000..75cb285
--- /dev/null
+++ b/tests/ip-localhost-ipv4-json
@@ -0,0 +1,12 @@
+{
+ "ADDRESS":"127.0.0.1",
+ "HOSTNAME":"localhost",
+ "NETWORK":"127.0.0.1",
+ "NETMASK":"255.255.255.255",
+ "PREFIX":"32",
+ "BROADCAST":"127.0.0.1",
+ "ADDRSPACE":"Loopback",
+ "MINADDR":"127.0.0.1",
+ "MAXADDR":"127.0.0.1",
+ "ADDRESSES":"1"
+}
diff --git a/tests/ip-localhost-ipv6 b/tests/ip-localhost-ipv6
new file mode 100644
index 0000000..0b793e2
--- /dev/null
+++ b/tests/ip-localhost-ipv6
@@ -0,0 +1 @@
+HOSTNAME=localhost
diff --git a/tests/ipcalc-delegate-ipv6-random.sh b/tests/ipcalc-delegate-ipv6-random.sh
new file mode 100755
index 0000000..4083f3f
--- /dev/null
+++ b/tests/ipcalc-delegate-ipv6-random.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# Copyright (C) 2019 Nikos Mavrogiannopoulos
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>
+
+IPCALC="${IPCALC:-build/ipcalc}"
+
+set -e
+
+eval $(${IPCALC} -r 96 --prefix -n --minaddr --maxaddr)
+
+NEW=$(${IPCALC} -d "${MINADDR}-${MAXADDR}" --no-decorate)
+
+set +e
+
+if test "${NEW}" != "${NETWORK}/${PREFIX}";then
+ echo "Networks do not match"
+ exit 1
+fi
+
+exit 0
diff --git a/tests/ipcalc-delegate-split-ipv4.sh b/tests/ipcalc-delegate-split-ipv4.sh
new file mode 100755
index 0000000..1dbfcea
--- /dev/null
+++ b/tests/ipcalc-delegate-split-ipv4.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# Copyright (C) 2019 Nikos Mavrogiannopoulos
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>
+
+IPCALC="${IPCALC:-build/ipcalc}"
+
+set -e
+
+eval $(${IPCALC} -r 24 --prefix -n)
+HEAD=$(${IPCALC} -S 26 ${NETWORK}/${PREFIX} --no-decorate|head -1)
+TAIL=$(${IPCALC} -S 26 ${NETWORK}/${PREFIX} --no-decorate|tail -1)
+echo "Network: ${NETWORK}/${PREFIX}"
+
+export HEAD TAIL
+FIRST=$(${IPCALC} --no-decorate -n ${HEAD})
+LAST=$(${IPCALC} --no-decorate -b ${TAIL})
+
+export FIRST LAST
+NEW=$(${IPCALC} --no-decorate -d ${FIRST}-${LAST})
+echo "Calculated: ${NETWORK}/${PREFIX}"
+
+set +e
+
+if test "${NEW}" != "${NETWORK}/${PREFIX}";then
+ echo "Addresses do not match"
+ exit 1
+fi
+
+exit 0
diff --git a/tests/ipcalc-delegate-split-ipv6.sh b/tests/ipcalc-delegate-split-ipv6.sh
new file mode 100755
index 0000000..39d0a4e
--- /dev/null
+++ b/tests/ipcalc-delegate-split-ipv6.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# Copyright (C) 2019 Nikos Mavrogiannopoulos
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>
+
+IPCALC="${IPCALC:-build/ipcalc}"
+
+set -e
+
+eval $(${IPCALC} -r 56 --prefix -n)
+HEAD=$(${IPCALC} -S 64 ${NETWORK}/${PREFIX} --no-decorate|head -1)
+TAIL=$(${IPCALC} -S 64 ${NETWORK}/${PREFIX} --no-decorate|tail -1)
+echo "Network: ${NETWORK}/${PREFIX}"
+
+export HEAD TAIL
+FIRST=$(${IPCALC} --no-decorate --minaddr ${HEAD})
+LAST=$(${IPCALC} --no-decorate --maxaddr ${TAIL})
+
+export FIRST LAST
+NEW=$(${IPCALC} --no-decorate -d ${FIRST}-${LAST})
+echo "Calculated: ${NETWORK}/${PREFIX}"
+
+set +e
+
+if test "${NEW}" != "${NETWORK}/${PREFIX}";then
+ echo "Addresses do not match"
+ exit 1
+fi
+
+exit 0
diff --git a/tests/ipcalc-testrunner.sh b/tests/ipcalc-testrunner.sh
new file mode 100755
index 0000000..d5bc2fd
--- /dev/null
+++ b/tests/ipcalc-testrunner.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+#
+# This shell script is a simple test runner for ipcalc tests.
+#
+# Adapted from: Matej Susta <msusta@redhat.com>
+#
+# Copyright (c) 2009 Red Hat, Inc. All rights reserved.
+#
+# This copyrighted material is made available to anyone wishing
+# to use, modify, copy, or redistribute it subject to the terms
+# and conditions of the GNU General Public License version 2.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with this program; if not, write to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+exitcode=0
+
+ok() {
+ echo "ok."
+}
+
+fail() {
+ echo "FAILED!"
+ exitcode=$((exitcode+1))
+ echo -e "Output was:\n$1"
+}
+
+TestSuccess() {
+ echo -n "Checking $@... "
+ output=$(sh -c "$1" 2>&1)
+ rc=$?
+ [ $rc -eq 0 ] && ok || fail $output
+}
+
+TestFailure() {
+ echo -n "Checking $@... "
+ output=$(sh -c "$1" 2>&1)
+ rc=$?
+ [ $rc -eq 0 ] && fail $output || ok
+}
+
+TestOutput() {
+ echo -n "Checking $1... "
+ output=$(sh -c "$1" 2>&1)
+ rc=$?
+ [ "$output" = "$2" ] && ok || fail $output
+}
+
+TestOutputFile() {
+ echo -n "Reading $2... "
+ [ -e "$2" ] || { fail "missing file $2"; return; }
+ contents="$(cat "$2" 2>/dev/null)"
+ [ -n "$contents" ] && ok || { fail "failed to read $2"; return; }
+ TestOutput "$1" "$contents"
+}
+
+TestEqual() {
+ TestSuccess "$1"
+ [ -n "$output" ] && output1="$output" || { fail "no output from $1"; return; }
+ TestSuccess "$2"
+ [ -n "$output" ] && output2="$output" || { fail "no output from $2"; return; }
+ echo -n "Comparing output... "
+ [ "$output1" = "$output2" ] && ok || fail "$output1 <> $output2"
+}
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ --test-success) TestSuccess "$2"; shift ;;
+ --test-failure) TestFailure "$2"; shift ;;
+ --test-output) TestOutput "$2" "$3"; shift; shift ;;
+ --test-outfile) TestOutputFile "$2" "$3"; shift; shift ;;
+ --test-equal) TestEqual "$2" "$3"; shift; shift ;;
+ *) fail "invalid argument: $1" ;;
+ esac
+ shift
+done
+
+echo "$exitcode test(s) failed."
+exit $exitcode
diff --git a/tests/json-i-2a03:2880:20:4f06:face:b00c:0:1-56 b/tests/json-i-2a03:2880:20:4f06:face:b00c:0:1-56
new file mode 100644
index 0000000..a00a5fa
--- /dev/null
+++ b/tests/json-i-2a03:2880:20:4f06:face:b00c:0:1-56
@@ -0,0 +1,12 @@
+{
+ "FULLADDRESS":"2a03:2880:0020:4f06:face:b00c:0000:0001",
+ "ADDRESS":"2a03:2880:20:4f06:face:b00c:0:1",
+ "FULLNETWORK":"2a03:2880:0020:4f00:0000:0000:0000:0000",
+ "NETWORK":"2a03:2880:20:4f00::",
+ "NETMASK":"ffff:ffff:ffff:ff00::",
+ "PREFIX":"56",
+ "ADDRSPACE":"Global Unicast",
+ "MINADDR":"2a03:2880:20:4f00::",
+ "MAXADDR":"2a03:2880:20:4fff:ffff:ffff:ffff:ffff",
+ "ADDRESSES":"4722366482869645213696"
+}
diff --git a/tests/json-nsplit-10.10.10.0-16-24 b/tests/json-nsplit-10.10.10.0-16-24
new file mode 100644
index 0000000..95b3db9
--- /dev/null
+++ b/tests/json-nsplit-10.10.10.0-16-24
@@ -0,0 +1,261 @@
+{
+ "SPLITNETWORK":[
+ "10.10.0.0/24",
+ "10.10.1.0/24",
+ "10.10.2.0/24",
+ "10.10.3.0/24",
+ "10.10.4.0/24",
+ "10.10.5.0/24",
+ "10.10.6.0/24",
+ "10.10.7.0/24",
+ "10.10.8.0/24",
+ "10.10.9.0/24",
+ "10.10.10.0/24",
+ "10.10.11.0/24",
+ "10.10.12.0/24",
+ "10.10.13.0/24",
+ "10.10.14.0/24",
+ "10.10.15.0/24",
+ "10.10.16.0/24",
+ "10.10.17.0/24",
+ "10.10.18.0/24",
+ "10.10.19.0/24",
+ "10.10.20.0/24",
+ "10.10.21.0/24",
+ "10.10.22.0/24",
+ "10.10.23.0/24",
+ "10.10.24.0/24",
+ "10.10.25.0/24",
+ "10.10.26.0/24",
+ "10.10.27.0/24",
+ "10.10.28.0/24",
+ "10.10.29.0/24",
+ "10.10.30.0/24",
+ "10.10.31.0/24",
+ "10.10.32.0/24",
+ "10.10.33.0/24",
+ "10.10.34.0/24",
+ "10.10.35.0/24",
+ "10.10.36.0/24",
+ "10.10.37.0/24",
+ "10.10.38.0/24",
+ "10.10.39.0/24",
+ "10.10.40.0/24",
+ "10.10.41.0/24",
+ "10.10.42.0/24",
+ "10.10.43.0/24",
+ "10.10.44.0/24",
+ "10.10.45.0/24",
+ "10.10.46.0/24",
+ "10.10.47.0/24",
+ "10.10.48.0/24",
+ "10.10.49.0/24",
+ "10.10.50.0/24",
+ "10.10.51.0/24",
+ "10.10.52.0/24",
+ "10.10.53.0/24",
+ "10.10.54.0/24",
+ "10.10.55.0/24",
+ "10.10.56.0/24",
+ "10.10.57.0/24",
+ "10.10.58.0/24",
+ "10.10.59.0/24",
+ "10.10.60.0/24",
+ "10.10.61.0/24",
+ "10.10.62.0/24",
+ "10.10.63.0/24",
+ "10.10.64.0/24",
+ "10.10.65.0/24",
+ "10.10.66.0/24",
+ "10.10.67.0/24",
+ "10.10.68.0/24",
+ "10.10.69.0/24",
+ "10.10.70.0/24",
+ "10.10.71.0/24",
+ "10.10.72.0/24",
+ "10.10.73.0/24",
+ "10.10.74.0/24",
+ "10.10.75.0/24",
+ "10.10.76.0/24",
+ "10.10.77.0/24",
+ "10.10.78.0/24",
+ "10.10.79.0/24",
+ "10.10.80.0/24",
+ "10.10.81.0/24",
+ "10.10.82.0/24",
+ "10.10.83.0/24",
+ "10.10.84.0/24",
+ "10.10.85.0/24",
+ "10.10.86.0/24",
+ "10.10.87.0/24",
+ "10.10.88.0/24",
+ "10.10.89.0/24",
+ "10.10.90.0/24",
+ "10.10.91.0/24",
+ "10.10.92.0/24",
+ "10.10.93.0/24",
+ "10.10.94.0/24",
+ "10.10.95.0/24",
+ "10.10.96.0/24",
+ "10.10.97.0/24",
+ "10.10.98.0/24",
+ "10.10.99.0/24",
+ "10.10.100.0/24",
+ "10.10.101.0/24",
+ "10.10.102.0/24",
+ "10.10.103.0/24",
+ "10.10.104.0/24",
+ "10.10.105.0/24",
+ "10.10.106.0/24",
+ "10.10.107.0/24",
+ "10.10.108.0/24",
+ "10.10.109.0/24",
+ "10.10.110.0/24",
+ "10.10.111.0/24",
+ "10.10.112.0/24",
+ "10.10.113.0/24",
+ "10.10.114.0/24",
+ "10.10.115.0/24",
+ "10.10.116.0/24",
+ "10.10.117.0/24",
+ "10.10.118.0/24",
+ "10.10.119.0/24",
+ "10.10.120.0/24",
+ "10.10.121.0/24",
+ "10.10.122.0/24",
+ "10.10.123.0/24",
+ "10.10.124.0/24",
+ "10.10.125.0/24",
+ "10.10.126.0/24",
+ "10.10.127.0/24",
+ "10.10.128.0/24",
+ "10.10.129.0/24",
+ "10.10.130.0/24",
+ "10.10.131.0/24",
+ "10.10.132.0/24",
+ "10.10.133.0/24",
+ "10.10.134.0/24",
+ "10.10.135.0/24",
+ "10.10.136.0/24",
+ "10.10.137.0/24",
+ "10.10.138.0/24",
+ "10.10.139.0/24",
+ "10.10.140.0/24",
+ "10.10.141.0/24",
+ "10.10.142.0/24",
+ "10.10.143.0/24",
+ "10.10.144.0/24",
+ "10.10.145.0/24",
+ "10.10.146.0/24",
+ "10.10.147.0/24",
+ "10.10.148.0/24",
+ "10.10.149.0/24",
+ "10.10.150.0/24",
+ "10.10.151.0/24",
+ "10.10.152.0/24",
+ "10.10.153.0/24",
+ "10.10.154.0/24",
+ "10.10.155.0/24",
+ "10.10.156.0/24",
+ "10.10.157.0/24",
+ "10.10.158.0/24",
+ "10.10.159.0/24",
+ "10.10.160.0/24",
+ "10.10.161.0/24",
+ "10.10.162.0/24",
+ "10.10.163.0/24",
+ "10.10.164.0/24",
+ "10.10.165.0/24",
+ "10.10.166.0/24",
+ "10.10.167.0/24",
+ "10.10.168.0/24",
+ "10.10.169.0/24",
+ "10.10.170.0/24",
+ "10.10.171.0/24",
+ "10.10.172.0/24",
+ "10.10.173.0/24",
+ "10.10.174.0/24",
+ "10.10.175.0/24",
+ "10.10.176.0/24",
+ "10.10.177.0/24",
+ "10.10.178.0/24",
+ "10.10.179.0/24",
+ "10.10.180.0/24",
+ "10.10.181.0/24",
+ "10.10.182.0/24",
+ "10.10.183.0/24",
+ "10.10.184.0/24",
+ "10.10.185.0/24",
+ "10.10.186.0/24",
+ "10.10.187.0/24",
+ "10.10.188.0/24",
+ "10.10.189.0/24",
+ "10.10.190.0/24",
+ "10.10.191.0/24",
+ "10.10.192.0/24",
+ "10.10.193.0/24",
+ "10.10.194.0/24",
+ "10.10.195.0/24",
+ "10.10.196.0/24",
+ "10.10.197.0/24",
+ "10.10.198.0/24",
+ "10.10.199.0/24",
+ "10.10.200.0/24",
+ "10.10.201.0/24",
+ "10.10.202.0/24",
+ "10.10.203.0/24",
+ "10.10.204.0/24",
+ "10.10.205.0/24",
+ "10.10.206.0/24",
+ "10.10.207.0/24",
+ "10.10.208.0/24",
+ "10.10.209.0/24",
+ "10.10.210.0/24",
+ "10.10.211.0/24",
+ "10.10.212.0/24",
+ "10.10.213.0/24",
+ "10.10.214.0/24",
+ "10.10.215.0/24",
+ "10.10.216.0/24",
+ "10.10.217.0/24",
+ "10.10.218.0/24",
+ "10.10.219.0/24",
+ "10.10.220.0/24",
+ "10.10.221.0/24",
+ "10.10.222.0/24",
+ "10.10.223.0/24",
+ "10.10.224.0/24",
+ "10.10.225.0/24",
+ "10.10.226.0/24",
+ "10.10.227.0/24",
+ "10.10.228.0/24",
+ "10.10.229.0/24",
+ "10.10.230.0/24",
+ "10.10.231.0/24",
+ "10.10.232.0/24",
+ "10.10.233.0/24",
+ "10.10.234.0/24",
+ "10.10.235.0/24",
+ "10.10.236.0/24",
+ "10.10.237.0/24",
+ "10.10.238.0/24",
+ "10.10.239.0/24",
+ "10.10.240.0/24",
+ "10.10.241.0/24",
+ "10.10.242.0/24",
+ "10.10.243.0/24",
+ "10.10.244.0/24",
+ "10.10.245.0/24",
+ "10.10.246.0/24",
+ "10.10.247.0/24",
+ "10.10.248.0/24",
+ "10.10.249.0/24",
+ "10.10.250.0/24",
+ "10.10.251.0/24",
+ "10.10.252.0/24",
+ "10.10.253.0/24",
+ "10.10.254.0/24",
+ "10.10.255.0/24"],
+ "NETS":"256",
+ "ADDRESSES":"254"
+}
diff --git a/tests/json-nsplit-192.168.5.45-24-26 b/tests/json-nsplit-192.168.5.45-24-26
new file mode 100644
index 0000000..1726822
--- /dev/null
+++ b/tests/json-nsplit-192.168.5.45-24-26
@@ -0,0 +1,9 @@
+{
+ "SPLITNETWORK":[
+ "192.168.5.0/26",
+ "192.168.5.64/26",
+ "192.168.5.128/26",
+ "192.168.5.192/26"],
+ "NETS":"4",
+ "ADDRESSES":"62"
+}
diff --git a/tests/json-nsplit-2a03:2880:20:4f06:face::-56-64 b/tests/json-nsplit-2a03:2880:20:4f06:face::-56-64
new file mode 100644
index 0000000..4aed1c7
--- /dev/null
+++ b/tests/json-nsplit-2a03:2880:20:4f06:face::-56-64
@@ -0,0 +1,261 @@
+{
+ "SPLITNETWORK":[
+ "2a03:2880:20:4f00::/64",
+ "2a03:2880:20:4f01::/64",
+ "2a03:2880:20:4f02::/64",
+ "2a03:2880:20:4f03::/64",
+ "2a03:2880:20:4f04::/64",
+ "2a03:2880:20:4f05::/64",
+ "2a03:2880:20:4f06::/64",
+ "2a03:2880:20:4f07::/64",
+ "2a03:2880:20:4f08::/64",
+ "2a03:2880:20:4f09::/64",
+ "2a03:2880:20:4f0a::/64",
+ "2a03:2880:20:4f0b::/64",
+ "2a03:2880:20:4f0c::/64",
+ "2a03:2880:20:4f0d::/64",
+ "2a03:2880:20:4f0e::/64",
+ "2a03:2880:20:4f0f::/64",
+ "2a03:2880:20:4f10::/64",
+ "2a03:2880:20:4f11::/64",
+ "2a03:2880:20:4f12::/64",
+ "2a03:2880:20:4f13::/64",
+ "2a03:2880:20:4f14::/64",
+ "2a03:2880:20:4f15::/64",
+ "2a03:2880:20:4f16::/64",
+ "2a03:2880:20:4f17::/64",
+ "2a03:2880:20:4f18::/64",
+ "2a03:2880:20:4f19::/64",
+ "2a03:2880:20:4f1a::/64",
+ "2a03:2880:20:4f1b::/64",
+ "2a03:2880:20:4f1c::/64",
+ "2a03:2880:20:4f1d::/64",
+ "2a03:2880:20:4f1e::/64",
+ "2a03:2880:20:4f1f::/64",
+ "2a03:2880:20:4f20::/64",
+ "2a03:2880:20:4f21::/64",
+ "2a03:2880:20:4f22::/64",
+ "2a03:2880:20:4f23::/64",
+ "2a03:2880:20:4f24::/64",
+ "2a03:2880:20:4f25::/64",
+ "2a03:2880:20:4f26::/64",
+ "2a03:2880:20:4f27::/64",
+ "2a03:2880:20:4f28::/64",
+ "2a03:2880:20:4f29::/64",
+ "2a03:2880:20:4f2a::/64",
+ "2a03:2880:20:4f2b::/64",
+ "2a03:2880:20:4f2c::/64",
+ "2a03:2880:20:4f2d::/64",
+ "2a03:2880:20:4f2e::/64",
+ "2a03:2880:20:4f2f::/64",
+ "2a03:2880:20:4f30::/64",
+ "2a03:2880:20:4f31::/64",
+ "2a03:2880:20:4f32::/64",
+ "2a03:2880:20:4f33::/64",
+ "2a03:2880:20:4f34::/64",
+ "2a03:2880:20:4f35::/64",
+ "2a03:2880:20:4f36::/64",
+ "2a03:2880:20:4f37::/64",
+ "2a03:2880:20:4f38::/64",
+ "2a03:2880:20:4f39::/64",
+ "2a03:2880:20:4f3a::/64",
+ "2a03:2880:20:4f3b::/64",
+ "2a03:2880:20:4f3c::/64",
+ "2a03:2880:20:4f3d::/64",
+ "2a03:2880:20:4f3e::/64",
+ "2a03:2880:20:4f3f::/64",
+ "2a03:2880:20:4f40::/64",
+ "2a03:2880:20:4f41::/64",
+ "2a03:2880:20:4f42::/64",
+ "2a03:2880:20:4f43::/64",
+ "2a03:2880:20:4f44::/64",
+ "2a03:2880:20:4f45::/64",
+ "2a03:2880:20:4f46::/64",
+ "2a03:2880:20:4f47::/64",
+ "2a03:2880:20:4f48::/64",
+ "2a03:2880:20:4f49::/64",
+ "2a03:2880:20:4f4a::/64",
+ "2a03:2880:20:4f4b::/64",
+ "2a03:2880:20:4f4c::/64",
+ "2a03:2880:20:4f4d::/64",
+ "2a03:2880:20:4f4e::/64",
+ "2a03:2880:20:4f4f::/64",
+ "2a03:2880:20:4f50::/64",
+ "2a03:2880:20:4f51::/64",
+ "2a03:2880:20:4f52::/64",
+ "2a03:2880:20:4f53::/64",
+ "2a03:2880:20:4f54::/64",
+ "2a03:2880:20:4f55::/64",
+ "2a03:2880:20:4f56::/64",
+ "2a03:2880:20:4f57::/64",
+ "2a03:2880:20:4f58::/64",
+ "2a03:2880:20:4f59::/64",
+ "2a03:2880:20:4f5a::/64",
+ "2a03:2880:20:4f5b::/64",
+ "2a03:2880:20:4f5c::/64",
+ "2a03:2880:20:4f5d::/64",
+ "2a03:2880:20:4f5e::/64",
+ "2a03:2880:20:4f5f::/64",
+ "2a03:2880:20:4f60::/64",
+ "2a03:2880:20:4f61::/64",
+ "2a03:2880:20:4f62::/64",
+ "2a03:2880:20:4f63::/64",
+ "2a03:2880:20:4f64::/64",
+ "2a03:2880:20:4f65::/64",
+ "2a03:2880:20:4f66::/64",
+ "2a03:2880:20:4f67::/64",
+ "2a03:2880:20:4f68::/64",
+ "2a03:2880:20:4f69::/64",
+ "2a03:2880:20:4f6a::/64",
+ "2a03:2880:20:4f6b::/64",
+ "2a03:2880:20:4f6c::/64",
+ "2a03:2880:20:4f6d::/64",
+ "2a03:2880:20:4f6e::/64",
+ "2a03:2880:20:4f6f::/64",
+ "2a03:2880:20:4f70::/64",
+ "2a03:2880:20:4f71::/64",
+ "2a03:2880:20:4f72::/64",
+ "2a03:2880:20:4f73::/64",
+ "2a03:2880:20:4f74::/64",
+ "2a03:2880:20:4f75::/64",
+ "2a03:2880:20:4f76::/64",
+ "2a03:2880:20:4f77::/64",
+ "2a03:2880:20:4f78::/64",
+ "2a03:2880:20:4f79::/64",
+ "2a03:2880:20:4f7a::/64",
+ "2a03:2880:20:4f7b::/64",
+ "2a03:2880:20:4f7c::/64",
+ "2a03:2880:20:4f7d::/64",
+ "2a03:2880:20:4f7e::/64",
+ "2a03:2880:20:4f7f::/64",
+ "2a03:2880:20:4f80::/64",
+ "2a03:2880:20:4f81::/64",
+ "2a03:2880:20:4f82::/64",
+ "2a03:2880:20:4f83::/64",
+ "2a03:2880:20:4f84::/64",
+ "2a03:2880:20:4f85::/64",
+ "2a03:2880:20:4f86::/64",
+ "2a03:2880:20:4f87::/64",
+ "2a03:2880:20:4f88::/64",
+ "2a03:2880:20:4f89::/64",
+ "2a03:2880:20:4f8a::/64",
+ "2a03:2880:20:4f8b::/64",
+ "2a03:2880:20:4f8c::/64",
+ "2a03:2880:20:4f8d::/64",
+ "2a03:2880:20:4f8e::/64",
+ "2a03:2880:20:4f8f::/64",
+ "2a03:2880:20:4f90::/64",
+ "2a03:2880:20:4f91::/64",
+ "2a03:2880:20:4f92::/64",
+ "2a03:2880:20:4f93::/64",
+ "2a03:2880:20:4f94::/64",
+ "2a03:2880:20:4f95::/64",
+ "2a03:2880:20:4f96::/64",
+ "2a03:2880:20:4f97::/64",
+ "2a03:2880:20:4f98::/64",
+ "2a03:2880:20:4f99::/64",
+ "2a03:2880:20:4f9a::/64",
+ "2a03:2880:20:4f9b::/64",
+ "2a03:2880:20:4f9c::/64",
+ "2a03:2880:20:4f9d::/64",
+ "2a03:2880:20:4f9e::/64",
+ "2a03:2880:20:4f9f::/64",
+ "2a03:2880:20:4fa0::/64",
+ "2a03:2880:20:4fa1::/64",
+ "2a03:2880:20:4fa2::/64",
+ "2a03:2880:20:4fa3::/64",
+ "2a03:2880:20:4fa4::/64",
+ "2a03:2880:20:4fa5::/64",
+ "2a03:2880:20:4fa6::/64",
+ "2a03:2880:20:4fa7::/64",
+ "2a03:2880:20:4fa8::/64",
+ "2a03:2880:20:4fa9::/64",
+ "2a03:2880:20:4faa::/64",
+ "2a03:2880:20:4fab::/64",
+ "2a03:2880:20:4fac::/64",
+ "2a03:2880:20:4fad::/64",
+ "2a03:2880:20:4fae::/64",
+ "2a03:2880:20:4faf::/64",
+ "2a03:2880:20:4fb0::/64",
+ "2a03:2880:20:4fb1::/64",
+ "2a03:2880:20:4fb2::/64",
+ "2a03:2880:20:4fb3::/64",
+ "2a03:2880:20:4fb4::/64",
+ "2a03:2880:20:4fb5::/64",
+ "2a03:2880:20:4fb6::/64",
+ "2a03:2880:20:4fb7::/64",
+ "2a03:2880:20:4fb8::/64",
+ "2a03:2880:20:4fb9::/64",
+ "2a03:2880:20:4fba::/64",
+ "2a03:2880:20:4fbb::/64",
+ "2a03:2880:20:4fbc::/64",
+ "2a03:2880:20:4fbd::/64",
+ "2a03:2880:20:4fbe::/64",
+ "2a03:2880:20:4fbf::/64",
+ "2a03:2880:20:4fc0::/64",
+ "2a03:2880:20:4fc1::/64",
+ "2a03:2880:20:4fc2::/64",
+ "2a03:2880:20:4fc3::/64",
+ "2a03:2880:20:4fc4::/64",
+ "2a03:2880:20:4fc5::/64",
+ "2a03:2880:20:4fc6::/64",
+ "2a03:2880:20:4fc7::/64",
+ "2a03:2880:20:4fc8::/64",
+ "2a03:2880:20:4fc9::/64",
+ "2a03:2880:20:4fca::/64",
+ "2a03:2880:20:4fcb::/64",
+ "2a03:2880:20:4fcc::/64",
+ "2a03:2880:20:4fcd::/64",
+ "2a03:2880:20:4fce::/64",
+ "2a03:2880:20:4fcf::/64",
+ "2a03:2880:20:4fd0::/64",
+ "2a03:2880:20:4fd1::/64",
+ "2a03:2880:20:4fd2::/64",
+ "2a03:2880:20:4fd3::/64",
+ "2a03:2880:20:4fd4::/64",
+ "2a03:2880:20:4fd5::/64",
+ "2a03:2880:20:4fd6::/64",
+ "2a03:2880:20:4fd7::/64",
+ "2a03:2880:20:4fd8::/64",
+ "2a03:2880:20:4fd9::/64",
+ "2a03:2880:20:4fda::/64",
+ "2a03:2880:20:4fdb::/64",
+ "2a03:2880:20:4fdc::/64",
+ "2a03:2880:20:4fdd::/64",
+ "2a03:2880:20:4fde::/64",
+ "2a03:2880:20:4fdf::/64",
+ "2a03:2880:20:4fe0::/64",
+ "2a03:2880:20:4fe1::/64",
+ "2a03:2880:20:4fe2::/64",
+ "2a03:2880:20:4fe3::/64",
+ "2a03:2880:20:4fe4::/64",
+ "2a03:2880:20:4fe5::/64",
+ "2a03:2880:20:4fe6::/64",
+ "2a03:2880:20:4fe7::/64",
+ "2a03:2880:20:4fe8::/64",
+ "2a03:2880:20:4fe9::/64",
+ "2a03:2880:20:4fea::/64",
+ "2a03:2880:20:4feb::/64",
+ "2a03:2880:20:4fec::/64",
+ "2a03:2880:20:4fed::/64",
+ "2a03:2880:20:4fee::/64",
+ "2a03:2880:20:4fef::/64",
+ "2a03:2880:20:4ff0::/64",
+ "2a03:2880:20:4ff1::/64",
+ "2a03:2880:20:4ff2::/64",
+ "2a03:2880:20:4ff3::/64",
+ "2a03:2880:20:4ff4::/64",
+ "2a03:2880:20:4ff5::/64",
+ "2a03:2880:20:4ff6::/64",
+ "2a03:2880:20:4ff7::/64",
+ "2a03:2880:20:4ff8::/64",
+ "2a03:2880:20:4ff9::/64",
+ "2a03:2880:20:4ffa::/64",
+ "2a03:2880:20:4ffb::/64",
+ "2a03:2880:20:4ffc::/64",
+ "2a03:2880:20:4ffd::/64",
+ "2a03:2880:20:4ffe::/64",
+ "2a03:2880:20:4fff::/64"],
+ "NETS":"256",
+ "ADDRESSES":"18446744073709551616"
+}
diff --git a/tests/json-split-10.10.10.0-16-24 b/tests/json-split-10.10.10.0-16-24
new file mode 100644
index 0000000..95b3db9
--- /dev/null
+++ b/tests/json-split-10.10.10.0-16-24
@@ -0,0 +1,261 @@
+{
+ "SPLITNETWORK":[
+ "10.10.0.0/24",
+ "10.10.1.0/24",
+ "10.10.2.0/24",
+ "10.10.3.0/24",
+ "10.10.4.0/24",
+ "10.10.5.0/24",
+ "10.10.6.0/24",
+ "10.10.7.0/24",
+ "10.10.8.0/24",
+ "10.10.9.0/24",
+ "10.10.10.0/24",
+ "10.10.11.0/24",
+ "10.10.12.0/24",
+ "10.10.13.0/24",
+ "10.10.14.0/24",
+ "10.10.15.0/24",
+ "10.10.16.0/24",
+ "10.10.17.0/24",
+ "10.10.18.0/24",
+ "10.10.19.0/24",
+ "10.10.20.0/24",
+ "10.10.21.0/24",
+ "10.10.22.0/24",
+ "10.10.23.0/24",
+ "10.10.24.0/24",
+ "10.10.25.0/24",
+ "10.10.26.0/24",
+ "10.10.27.0/24",
+ "10.10.28.0/24",
+ "10.10.29.0/24",
+ "10.10.30.0/24",
+ "10.10.31.0/24",
+ "10.10.32.0/24",
+ "10.10.33.0/24",
+ "10.10.34.0/24",
+ "10.10.35.0/24",
+ "10.10.36.0/24",
+ "10.10.37.0/24",
+ "10.10.38.0/24",
+ "10.10.39.0/24",
+ "10.10.40.0/24",
+ "10.10.41.0/24",
+ "10.10.42.0/24",
+ "10.10.43.0/24",
+ "10.10.44.0/24",
+ "10.10.45.0/24",
+ "10.10.46.0/24",
+ "10.10.47.0/24",
+ "10.10.48.0/24",
+ "10.10.49.0/24",
+ "10.10.50.0/24",
+ "10.10.51.0/24",
+ "10.10.52.0/24",
+ "10.10.53.0/24",
+ "10.10.54.0/24",
+ "10.10.55.0/24",
+ "10.10.56.0/24",
+ "10.10.57.0/24",
+ "10.10.58.0/24",
+ "10.10.59.0/24",
+ "10.10.60.0/24",
+ "10.10.61.0/24",
+ "10.10.62.0/24",
+ "10.10.63.0/24",
+ "10.10.64.0/24",
+ "10.10.65.0/24",
+ "10.10.66.0/24",
+ "10.10.67.0/24",
+ "10.10.68.0/24",
+ "10.10.69.0/24",
+ "10.10.70.0/24",
+ "10.10.71.0/24",
+ "10.10.72.0/24",
+ "10.10.73.0/24",
+ "10.10.74.0/24",
+ "10.10.75.0/24",
+ "10.10.76.0/24",
+ "10.10.77.0/24",
+ "10.10.78.0/24",
+ "10.10.79.0/24",
+ "10.10.80.0/24",
+ "10.10.81.0/24",
+ "10.10.82.0/24",
+ "10.10.83.0/24",
+ "10.10.84.0/24",
+ "10.10.85.0/24",
+ "10.10.86.0/24",
+ "10.10.87.0/24",
+ "10.10.88.0/24",
+ "10.10.89.0/24",
+ "10.10.90.0/24",
+ "10.10.91.0/24",
+ "10.10.92.0/24",
+ "10.10.93.0/24",
+ "10.10.94.0/24",
+ "10.10.95.0/24",
+ "10.10.96.0/24",
+ "10.10.97.0/24",
+ "10.10.98.0/24",
+ "10.10.99.0/24",
+ "10.10.100.0/24",
+ "10.10.101.0/24",
+ "10.10.102.0/24",
+ "10.10.103.0/24",
+ "10.10.104.0/24",
+ "10.10.105.0/24",
+ "10.10.106.0/24",
+ "10.10.107.0/24",
+ "10.10.108.0/24",
+ "10.10.109.0/24",
+ "10.10.110.0/24",
+ "10.10.111.0/24",
+ "10.10.112.0/24",
+ "10.10.113.0/24",
+ "10.10.114.0/24",
+ "10.10.115.0/24",
+ "10.10.116.0/24",
+ "10.10.117.0/24",
+ "10.10.118.0/24",
+ "10.10.119.0/24",
+ "10.10.120.0/24",
+ "10.10.121.0/24",
+ "10.10.122.0/24",
+ "10.10.123.0/24",
+ "10.10.124.0/24",
+ "10.10.125.0/24",
+ "10.10.126.0/24",
+ "10.10.127.0/24",
+ "10.10.128.0/24",
+ "10.10.129.0/24",
+ "10.10.130.0/24",
+ "10.10.131.0/24",
+ "10.10.132.0/24",
+ "10.10.133.0/24",
+ "10.10.134.0/24",
+ "10.10.135.0/24",
+ "10.10.136.0/24",
+ "10.10.137.0/24",
+ "10.10.138.0/24",
+ "10.10.139.0/24",
+ "10.10.140.0/24",
+ "10.10.141.0/24",
+ "10.10.142.0/24",
+ "10.10.143.0/24",
+ "10.10.144.0/24",
+ "10.10.145.0/24",
+ "10.10.146.0/24",
+ "10.10.147.0/24",
+ "10.10.148.0/24",
+ "10.10.149.0/24",
+ "10.10.150.0/24",
+ "10.10.151.0/24",
+ "10.10.152.0/24",
+ "10.10.153.0/24",
+ "10.10.154.0/24",
+ "10.10.155.0/24",
+ "10.10.156.0/24",
+ "10.10.157.0/24",
+ "10.10.158.0/24",
+ "10.10.159.0/24",
+ "10.10.160.0/24",
+ "10.10.161.0/24",
+ "10.10.162.0/24",
+ "10.10.163.0/24",
+ "10.10.164.0/24",
+ "10.10.165.0/24",
+ "10.10.166.0/24",
+ "10.10.167.0/24",
+ "10.10.168.0/24",
+ "10.10.169.0/24",
+ "10.10.170.0/24",
+ "10.10.171.0/24",
+ "10.10.172.0/24",
+ "10.10.173.0/24",
+ "10.10.174.0/24",
+ "10.10.175.0/24",
+ "10.10.176.0/24",
+ "10.10.177.0/24",
+ "10.10.178.0/24",
+ "10.10.179.0/24",
+ "10.10.180.0/24",
+ "10.10.181.0/24",
+ "10.10.182.0/24",
+ "10.10.183.0/24",
+ "10.10.184.0/24",
+ "10.10.185.0/24",
+ "10.10.186.0/24",
+ "10.10.187.0/24",
+ "10.10.188.0/24",
+ "10.10.189.0/24",
+ "10.10.190.0/24",
+ "10.10.191.0/24",
+ "10.10.192.0/24",
+ "10.10.193.0/24",
+ "10.10.194.0/24",
+ "10.10.195.0/24",
+ "10.10.196.0/24",
+ "10.10.197.0/24",
+ "10.10.198.0/24",
+ "10.10.199.0/24",
+ "10.10.200.0/24",
+ "10.10.201.0/24",
+ "10.10.202.0/24",
+ "10.10.203.0/24",
+ "10.10.204.0/24",
+ "10.10.205.0/24",
+ "10.10.206.0/24",
+ "10.10.207.0/24",
+ "10.10.208.0/24",
+ "10.10.209.0/24",
+ "10.10.210.0/24",
+ "10.10.211.0/24",
+ "10.10.212.0/24",
+ "10.10.213.0/24",
+ "10.10.214.0/24",
+ "10.10.215.0/24",
+ "10.10.216.0/24",
+ "10.10.217.0/24",
+ "10.10.218.0/24",
+ "10.10.219.0/24",
+ "10.10.220.0/24",
+ "10.10.221.0/24",
+ "10.10.222.0/24",
+ "10.10.223.0/24",
+ "10.10.224.0/24",
+ "10.10.225.0/24",
+ "10.10.226.0/24",
+ "10.10.227.0/24",
+ "10.10.228.0/24",
+ "10.10.229.0/24",
+ "10.10.230.0/24",
+ "10.10.231.0/24",
+ "10.10.232.0/24",
+ "10.10.233.0/24",
+ "10.10.234.0/24",
+ "10.10.235.0/24",
+ "10.10.236.0/24",
+ "10.10.237.0/24",
+ "10.10.238.0/24",
+ "10.10.239.0/24",
+ "10.10.240.0/24",
+ "10.10.241.0/24",
+ "10.10.242.0/24",
+ "10.10.243.0/24",
+ "10.10.244.0/24",
+ "10.10.245.0/24",
+ "10.10.246.0/24",
+ "10.10.247.0/24",
+ "10.10.248.0/24",
+ "10.10.249.0/24",
+ "10.10.250.0/24",
+ "10.10.251.0/24",
+ "10.10.252.0/24",
+ "10.10.253.0/24",
+ "10.10.254.0/24",
+ "10.10.255.0/24"],
+ "NETS":"256",
+ "ADDRESSES":"254"
+}
diff --git a/tests/json-split-192.168.5.45-24-26 b/tests/json-split-192.168.5.45-24-26
new file mode 100644
index 0000000..1726822
--- /dev/null
+++ b/tests/json-split-192.168.5.45-24-26
@@ -0,0 +1,9 @@
+{
+ "SPLITNETWORK":[
+ "192.168.5.0/26",
+ "192.168.5.64/26",
+ "192.168.5.128/26",
+ "192.168.5.192/26"],
+ "NETS":"4",
+ "ADDRESSES":"62"
+}
diff --git a/tests/json-split-2a03:2880:20:4f06:face::-56-64 b/tests/json-split-2a03:2880:20:4f06:face::-56-64
new file mode 100644
index 0000000..aeb294e
--- /dev/null
+++ b/tests/json-split-2a03:2880:20:4f06:face::-56-64
@@ -0,0 +1,261 @@
+{
+ "split_network":[
+ "2a03:2880:20:4f00::/64",
+ "2a03:2880:20:4f01::/64",
+ "2a03:2880:20:4f02::/64",
+ "2a03:2880:20:4f03::/64",
+ "2a03:2880:20:4f04::/64",
+ "2a03:2880:20:4f05::/64",
+ "2a03:2880:20:4f06::/64",
+ "2a03:2880:20:4f07::/64",
+ "2a03:2880:20:4f08::/64",
+ "2a03:2880:20:4f09::/64",
+ "2a03:2880:20:4f0a::/64",
+ "2a03:2880:20:4f0b::/64",
+ "2a03:2880:20:4f0c::/64",
+ "2a03:2880:20:4f0d::/64",
+ "2a03:2880:20:4f0e::/64",
+ "2a03:2880:20:4f0f::/64",
+ "2a03:2880:20:4f10::/64",
+ "2a03:2880:20:4f11::/64",
+ "2a03:2880:20:4f12::/64",
+ "2a03:2880:20:4f13::/64",
+ "2a03:2880:20:4f14::/64",
+ "2a03:2880:20:4f15::/64",
+ "2a03:2880:20:4f16::/64",
+ "2a03:2880:20:4f17::/64",
+ "2a03:2880:20:4f18::/64",
+ "2a03:2880:20:4f19::/64",
+ "2a03:2880:20:4f1a::/64",
+ "2a03:2880:20:4f1b::/64",
+ "2a03:2880:20:4f1c::/64",
+ "2a03:2880:20:4f1d::/64",
+ "2a03:2880:20:4f1e::/64",
+ "2a03:2880:20:4f1f::/64",
+ "2a03:2880:20:4f20::/64",
+ "2a03:2880:20:4f21::/64",
+ "2a03:2880:20:4f22::/64",
+ "2a03:2880:20:4f23::/64",
+ "2a03:2880:20:4f24::/64",
+ "2a03:2880:20:4f25::/64",
+ "2a03:2880:20:4f26::/64",
+ "2a03:2880:20:4f27::/64",
+ "2a03:2880:20:4f28::/64",
+ "2a03:2880:20:4f29::/64",
+ "2a03:2880:20:4f2a::/64",
+ "2a03:2880:20:4f2b::/64",
+ "2a03:2880:20:4f2c::/64",
+ "2a03:2880:20:4f2d::/64",
+ "2a03:2880:20:4f2e::/64",
+ "2a03:2880:20:4f2f::/64",
+ "2a03:2880:20:4f30::/64",
+ "2a03:2880:20:4f31::/64",
+ "2a03:2880:20:4f32::/64",
+ "2a03:2880:20:4f33::/64",
+ "2a03:2880:20:4f34::/64",
+ "2a03:2880:20:4f35::/64",
+ "2a03:2880:20:4f36::/64",
+ "2a03:2880:20:4f37::/64",
+ "2a03:2880:20:4f38::/64",
+ "2a03:2880:20:4f39::/64",
+ "2a03:2880:20:4f3a::/64",
+ "2a03:2880:20:4f3b::/64",
+ "2a03:2880:20:4f3c::/64",
+ "2a03:2880:20:4f3d::/64",
+ "2a03:2880:20:4f3e::/64",
+ "2a03:2880:20:4f3f::/64",
+ "2a03:2880:20:4f40::/64",
+ "2a03:2880:20:4f41::/64",
+ "2a03:2880:20:4f42::/64",
+ "2a03:2880:20:4f43::/64",
+ "2a03:2880:20:4f44::/64",
+ "2a03:2880:20:4f45::/64",
+ "2a03:2880:20:4f46::/64",
+ "2a03:2880:20:4f47::/64",
+ "2a03:2880:20:4f48::/64",
+ "2a03:2880:20:4f49::/64",
+ "2a03:2880:20:4f4a::/64",
+ "2a03:2880:20:4f4b::/64",
+ "2a03:2880:20:4f4c::/64",
+ "2a03:2880:20:4f4d::/64",
+ "2a03:2880:20:4f4e::/64",
+ "2a03:2880:20:4f4f::/64",
+ "2a03:2880:20:4f50::/64",
+ "2a03:2880:20:4f51::/64",
+ "2a03:2880:20:4f52::/64",
+ "2a03:2880:20:4f53::/64",
+ "2a03:2880:20:4f54::/64",
+ "2a03:2880:20:4f55::/64",
+ "2a03:2880:20:4f56::/64",
+ "2a03:2880:20:4f57::/64",
+ "2a03:2880:20:4f58::/64",
+ "2a03:2880:20:4f59::/64",
+ "2a03:2880:20:4f5a::/64",
+ "2a03:2880:20:4f5b::/64",
+ "2a03:2880:20:4f5c::/64",
+ "2a03:2880:20:4f5d::/64",
+ "2a03:2880:20:4f5e::/64",
+ "2a03:2880:20:4f5f::/64",
+ "2a03:2880:20:4f60::/64",
+ "2a03:2880:20:4f61::/64",
+ "2a03:2880:20:4f62::/64",
+ "2a03:2880:20:4f63::/64",
+ "2a03:2880:20:4f64::/64",
+ "2a03:2880:20:4f65::/64",
+ "2a03:2880:20:4f66::/64",
+ "2a03:2880:20:4f67::/64",
+ "2a03:2880:20:4f68::/64",
+ "2a03:2880:20:4f69::/64",
+ "2a03:2880:20:4f6a::/64",
+ "2a03:2880:20:4f6b::/64",
+ "2a03:2880:20:4f6c::/64",
+ "2a03:2880:20:4f6d::/64",
+ "2a03:2880:20:4f6e::/64",
+ "2a03:2880:20:4f6f::/64",
+ "2a03:2880:20:4f70::/64",
+ "2a03:2880:20:4f71::/64",
+ "2a03:2880:20:4f72::/64",
+ "2a03:2880:20:4f73::/64",
+ "2a03:2880:20:4f74::/64",
+ "2a03:2880:20:4f75::/64",
+ "2a03:2880:20:4f76::/64",
+ "2a03:2880:20:4f77::/64",
+ "2a03:2880:20:4f78::/64",
+ "2a03:2880:20:4f79::/64",
+ "2a03:2880:20:4f7a::/64",
+ "2a03:2880:20:4f7b::/64",
+ "2a03:2880:20:4f7c::/64",
+ "2a03:2880:20:4f7d::/64",
+ "2a03:2880:20:4f7e::/64",
+ "2a03:2880:20:4f7f::/64",
+ "2a03:2880:20:4f80::/64",
+ "2a03:2880:20:4f81::/64",
+ "2a03:2880:20:4f82::/64",
+ "2a03:2880:20:4f83::/64",
+ "2a03:2880:20:4f84::/64",
+ "2a03:2880:20:4f85::/64",
+ "2a03:2880:20:4f86::/64",
+ "2a03:2880:20:4f87::/64",
+ "2a03:2880:20:4f88::/64",
+ "2a03:2880:20:4f89::/64",
+ "2a03:2880:20:4f8a::/64",
+ "2a03:2880:20:4f8b::/64",
+ "2a03:2880:20:4f8c::/64",
+ "2a03:2880:20:4f8d::/64",
+ "2a03:2880:20:4f8e::/64",
+ "2a03:2880:20:4f8f::/64",
+ "2a03:2880:20:4f90::/64",
+ "2a03:2880:20:4f91::/64",
+ "2a03:2880:20:4f92::/64",
+ "2a03:2880:20:4f93::/64",
+ "2a03:2880:20:4f94::/64",
+ "2a03:2880:20:4f95::/64",
+ "2a03:2880:20:4f96::/64",
+ "2a03:2880:20:4f97::/64",
+ "2a03:2880:20:4f98::/64",
+ "2a03:2880:20:4f99::/64",
+ "2a03:2880:20:4f9a::/64",
+ "2a03:2880:20:4f9b::/64",
+ "2a03:2880:20:4f9c::/64",
+ "2a03:2880:20:4f9d::/64",
+ "2a03:2880:20:4f9e::/64",
+ "2a03:2880:20:4f9f::/64",
+ "2a03:2880:20:4fa0::/64",
+ "2a03:2880:20:4fa1::/64",
+ "2a03:2880:20:4fa2::/64",
+ "2a03:2880:20:4fa3::/64",
+ "2a03:2880:20:4fa4::/64",
+ "2a03:2880:20:4fa5::/64",
+ "2a03:2880:20:4fa6::/64",
+ "2a03:2880:20:4fa7::/64",
+ "2a03:2880:20:4fa8::/64",
+ "2a03:2880:20:4fa9::/64",
+ "2a03:2880:20:4faa::/64",
+ "2a03:2880:20:4fab::/64",
+ "2a03:2880:20:4fac::/64",
+ "2a03:2880:20:4fad::/64",
+ "2a03:2880:20:4fae::/64",
+ "2a03:2880:20:4faf::/64",
+ "2a03:2880:20:4fb0::/64",
+ "2a03:2880:20:4fb1::/64",
+ "2a03:2880:20:4fb2::/64",
+ "2a03:2880:20:4fb3::/64",
+ "2a03:2880:20:4fb4::/64",
+ "2a03:2880:20:4fb5::/64",
+ "2a03:2880:20:4fb6::/64",
+ "2a03:2880:20:4fb7::/64",
+ "2a03:2880:20:4fb8::/64",
+ "2a03:2880:20:4fb9::/64",
+ "2a03:2880:20:4fba::/64",
+ "2a03:2880:20:4fbb::/64",
+ "2a03:2880:20:4fbc::/64",
+ "2a03:2880:20:4fbd::/64",
+ "2a03:2880:20:4fbe::/64",
+ "2a03:2880:20:4fbf::/64",
+ "2a03:2880:20:4fc0::/64",
+ "2a03:2880:20:4fc1::/64",
+ "2a03:2880:20:4fc2::/64",
+ "2a03:2880:20:4fc3::/64",
+ "2a03:2880:20:4fc4::/64",
+ "2a03:2880:20:4fc5::/64",
+ "2a03:2880:20:4fc6::/64",
+ "2a03:2880:20:4fc7::/64",
+ "2a03:2880:20:4fc8::/64",
+ "2a03:2880:20:4fc9::/64",
+ "2a03:2880:20:4fca::/64",
+ "2a03:2880:20:4fcb::/64",
+ "2a03:2880:20:4fcc::/64",
+ "2a03:2880:20:4fcd::/64",
+ "2a03:2880:20:4fce::/64",
+ "2a03:2880:20:4fcf::/64",
+ "2a03:2880:20:4fd0::/64",
+ "2a03:2880:20:4fd1::/64",
+ "2a03:2880:20:4fd2::/64",
+ "2a03:2880:20:4fd3::/64",
+ "2a03:2880:20:4fd4::/64",
+ "2a03:2880:20:4fd5::/64",
+ "2a03:2880:20:4fd6::/64",
+ "2a03:2880:20:4fd7::/64",
+ "2a03:2880:20:4fd8::/64",
+ "2a03:2880:20:4fd9::/64",
+ "2a03:2880:20:4fda::/64",
+ "2a03:2880:20:4fdb::/64",
+ "2a03:2880:20:4fdc::/64",
+ "2a03:2880:20:4fdd::/64",
+ "2a03:2880:20:4fde::/64",
+ "2a03:2880:20:4fdf::/64",
+ "2a03:2880:20:4fe0::/64",
+ "2a03:2880:20:4fe1::/64",
+ "2a03:2880:20:4fe2::/64",
+ "2a03:2880:20:4fe3::/64",
+ "2a03:2880:20:4fe4::/64",
+ "2a03:2880:20:4fe5::/64",
+ "2a03:2880:20:4fe6::/64",
+ "2a03:2880:20:4fe7::/64",
+ "2a03:2880:20:4fe8::/64",
+ "2a03:2880:20:4fe9::/64",
+ "2a03:2880:20:4fea::/64",
+ "2a03:2880:20:4feb::/64",
+ "2a03:2880:20:4fec::/64",
+ "2a03:2880:20:4fed::/64",
+ "2a03:2880:20:4fee::/64",
+ "2a03:2880:20:4fef::/64",
+ "2a03:2880:20:4ff0::/64",
+ "2a03:2880:20:4ff1::/64",
+ "2a03:2880:20:4ff2::/64",
+ "2a03:2880:20:4ff3::/64",
+ "2a03:2880:20:4ff4::/64",
+ "2a03:2880:20:4ff5::/64",
+ "2a03:2880:20:4ff6::/64",
+ "2a03:2880:20:4ff7::/64",
+ "2a03:2880:20:4ff8::/64",
+ "2a03:2880:20:4ff9::/64",
+ "2a03:2880:20:4ffa::/64",
+ "2a03:2880:20:4ffb::/64",
+ "2a03:2880:20:4ffc::/64",
+ "2a03:2880:20:4ffd::/64",
+ "2a03:2880:20:4ffe::/64",
+ "2a03:2880:20:4fff::/64"],
+ "nets":"256",
+ "host_per_net":"18446744073709551616"
+}
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..d3e6989
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,1330 @@
+testrunner = find_program('ipcalc-testrunner.sh')
+
+# Incompatible combinations test
+test('Split-Info',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -abmnp -S 26 10.100.1.0/24'
+ ]
+)
+test('Check-Info',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -c -abmnp 10.100.1.1'
+ ]
+)
+test('Check-Split',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -c -S 26 10.100.1.0/24'
+ ]
+)
+test('Check-Host',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -c -h 127.0.0.1'
+ ]
+)
+test('Random-Info',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -r 24 -i 127.0.0.1'
+ ]
+)
+test('Random',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -r 24' + '|grep Address'
+ ]
+)
+test('RandomAddress',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -r 24 -a' + '|grep ADDRESS'
+ ]
+)
+test('RandomIPv6Implicit',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -r 112' + '|grep Address'
+ ]
+)
+test('RandomIPv6PrefixIsValidULA',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -6 -r 48 -a' + '|grep ^ADDRESS=fd'
+ ]
+)
+test('RandomIPv6Explicit',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -6 -r 24' + '|grep Address'
+ ]
+)
+test('HostnameIPv6Localhost',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -6 -o localhost',
+ files('hostname-localhost-ipv6')
+ ]
+)
+test('HostnameIPv4Localhost',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -4 -o localhost',
+ files('hostname-localhost-ipv4')
+ ]
+)
+test('HostnameIPv4LocalhostJson',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j -4 -o localhost',
+ files('hostname-localhost-ipv4-json')
+ ]
+)
+test('IPIPv6Localhost',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -h ::1',
+ files('ip-localhost-ipv6')
+ ]
+)
+test('IPIPv4Localhost',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -h 127.0.0.1',
+ files('ip-localhost-ipv4')
+ ]
+)
+test('IPIPv4LocalhostJson',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j -h 127.0.0.1',
+ files('ip-localhost-ipv4-json')
+ ]
+)
+# --class-prefix tests
+test('AssignClassPrefix12',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -abmnp 12.15.1.5 --class-prefix',
+ files('12.15.1.5')
+ ]
+)
+test('AssignClassPrefix129',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -abmnp 129.15.31.5 --class-prefix',
+ files('129.15.31.5')
+ ]
+)
+test('AssignClassPrefix193',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -abmnp 193.92.31.0 --class-prefix',
+ files('193.92.31.0')
+ ]
+)
+
+# prefix tests
+test('TestPrefix31',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -abmnp 192.168.1.5/31',
+ files('192.168.1.5-31')
+ ]
+)
+test('TestPrefix24',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -abmnp 10.10.10.5/24',
+ files('192.168.1.5-24')
+ ]
+)
+test('TestPrefix30',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -abmnp 10.100.4.1/30',
+ files('192.168.1.5-30')
+ ]
+)
+test('TestPrefix16',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -abmnp 10.100.4.1/16',
+ files('192.168.1.5-16')
+ ]
+)
+test('TestPrefix8',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -abmnp 10.10.10.10/8',
+ files('192.168.1.5-8')
+ ]
+)
+
+# --split tests
+test('SplitPrefix18',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -S 18 10.10.10.10/16',
+ files('split-10.10.10.0-16-18')
+ ]
+)
+test('SplitPrefix24',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -S 24 10.10.10.0/16',
+ files('split-10.10.10.0-16-24')
+ ]
+)
+test('SplitPrefix26',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -S 26 192.168.5.45/24',
+ files('split-192.168.5.45-24-26')
+ ]
+)
+test('SplitPrefix29',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -S 29 192.168.5.0/24',
+ files('split-192.168.5.0-24-29')
+ ]
+)
+test('SplitPrefix31',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -S 31 192.168.5.0/24',
+ files('split-192.168.5.0-24-31')
+ ]
+)
+test('SplitPrefix32',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -S 32 192.168.5.0/24',
+ files('split-192.168.5.0-24-32')
+ ]
+)
+test('SplitPrefix64',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -S 64 2a03:2880:20:4f06:face::/56',
+ files('split-2a03:2880:20:4f06:face::-56-64')
+ ]
+)
+test('SplitPrefix128',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -S 128 fcfa:b4ca:f1d8:125b:dc00::/127',
+ files('split-fcfa:b4ca:f1d8:125b:dc00::-127-128')
+ ]
+)
+test('SplitPrefix120',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -S 120 fcfa:b4ca:f1d8:125b:dc00::/112',
+ files('split-fcfa:b4ca:f1d8:125b:dc00::-112-120')
+ ]
+)
+
+# --no-decorate tests
+test('NoDecorateSplitPrefix18',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -S 18 10.10.10.10/16',
+ files('nsplit-10.10.10.0-16-18')
+ ]
+)
+test('NoDecorateSplitPrefix24',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -S 24 10.10.10.0/16',
+ files('nsplit-10.10.10.0-16-24')
+ ]
+)
+test('NoDecorateSplitPrefix26',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -S 26 192.168.5.45/24',
+ files('nsplit-192.168.5.45-24-26')
+ ]
+)
+test('NoDecorateSplitPrefix29',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -S 29 192.168.5.0/24',
+ files('nsplit-192.168.5.0-24-29')
+ ]
+)
+test('NoDecorateSplitPrefix31',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -S 31 192.168.5.0/24',
+ files('nsplit-192.168.5.0-24-31')
+ ]
+)
+test('NoDecorateSplitPrefix32',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -S 32 192.168.5.0/24',
+ files('nsplit-192.168.5.0-24-32')
+ ]
+)
+test('NoDecorateSplitPrefix64',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -S 64 2a03:2880:20:4f06:face::/56',
+ files('nsplit-2a03:2880:20:4f06:face::-56-64')
+ ]
+)
+test('NoDecorateSplitPrefix128',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -S 128 fcfa:b4ca:f1d8:125b:dc00::/127',
+ files('nsplit-fcfa:b4ca:f1d8:125b:dc00::-127-128')
+ ]
+)
+test('NoDecorateSplitPrefix120',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -S 120 fcfa:b4ca:f1d8:125b:dc00::/112',
+ files('nsplit-fcfa:b4ca:f1d8:125b:dc00::-112-120')
+ ]
+)
+
+# --addrspace tests
+test('AllocateAddressSpacePrefix24',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --addrspace -abmnp 193.92.150.3/24',
+ files('193.92.150.3-24')
+ ]
+)
+test('AllocateAddressSpacePrefix64',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --addrspace -abmnp fd95:6be5:0ae0:84a5::/64',
+ files('fd95:6be5:0ae0:84a5::-64')
+ ]
+)
+test('AllocateAddressSpacePrefix48',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --addrspace -abmnp fd0b:a336:4e7d::/48',
+ files('fd0b:a336:4e7d::-48')
+ ]
+)
+
+# --info tests
+test('TestHumanReadableGenericInfoNoPrefix',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2a03:2880:20:4f06:face:b00c:0:1',
+ files('i-2a03:2880:20:4f06:face:b00c:0:1')
+ ]
+)
+test('TestHumanReadableGenericInfoInternetIPv4',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 3.130.45.15',
+ files('i-3.130.45.15')
+ ]
+)
+test('TestHumanReadableHostOnThisNetwork',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 0.0.0.1',
+ files('i-0.0.0.1')
+ ]
+)
+test('TestHumanReadablePrivateUse1',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 10.0.0.1',
+ files('i-10.0.0.1')
+ ]
+)
+test('TestHumanReadablePrivateUse2',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 172.16.0.1',
+ files('i-172.16.0.1')
+ ]
+)
+test('TestHumanReadablePrivateUse3',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 172.31.255.254',
+ files('i-172.31.255.254')
+ ]
+)
+test('TestHumanReadablePrivateUse4',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.168.0.1',
+ files('i-192.168.0.1')
+ ]
+)
+test('TestHumanReadableSharedAddressSpace',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 100.64.0.1',
+ files('i-100.64.0.1')
+ ]
+)
+test('TestHumanReadableLoopback',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 127.0.0.1',
+ files('i-127.0.0.1')
+ ]
+)
+test('TestHumanReadableLoopback2',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 127.0.1.1',
+ files('i-127.0.1.1')
+ ]
+)
+test('TestHumanReadableLinkLocal',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 169.254.0.1',
+ files('i-169.254.0.1')
+ ]
+)
+test('TestHumanReadableIETFProtocolAssignmentsIPv4',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.0.0.254',
+ files('i-192.0.0.254')
+ ]
+)
+test('TestHumanReadableServiceContinuityPrefixIPv4',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.0.0.6',
+ files('i-192.0.0.6')
+ ]
+)
+test('TestHumanReadableDummyAddressIPv4',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.0.0.8',
+ files('i-192.0.0.8')
+ ]
+)
+test('TestHumanReadablePortControlProtocolAnycastIPv4',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.0.0.9',
+ files('i-192.0.0.9')
+ ]
+)
+test('TestHumanReadableTraversalUsingRelaysAroundNATAnycast',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.0.0.10',
+ files('i-192.0.0.10')
+ ]
+)
+test('TestHumanReadableNAT64DNS64Discovery1',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.0.0.170',
+ files('i-192.0.0.170')
+ ]
+)
+test('TestHumanReadableNAT64DNS64Discovery2',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.0.0.171',
+ files('i-192.0.0.171')
+ ]
+)
+test('TestHumanReadableAS112v4',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.31.196.1',
+ files('i-192.31.196.1')
+ ]
+)
+test('TestHumanReadableDeprecated6to4RelayAnycast',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.88.99.1',
+ files('i-192.88.99.1')
+ ]
+)
+test('TestHumanReadableAMTIPv4',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.52.193.5',
+ files('i-192.52.193.5')
+ ]
+)
+test('TestHumanReadableDirectDelegationAS112ServiceIPv4',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.175.48.12',
+ files('i-192.175.48.12')
+ ]
+)
+test('TestHumanReadableTestNet1',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.0.2.1',
+ files('i-192.0.2.1')
+ ]
+)
+test('TestHumanReadableTestNet2',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 198.51.100.1',
+ files('i-198.51.100.1')
+ ]
+)
+test('TestHumanReadableTestNet3',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 203.0.113.1',
+ files('i-203.0.113.1')
+ ]
+)
+test('TestHumanReadableBenchmarking1',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 198.18.0.1',
+ files('i-198.18.0.1')
+ ]
+)
+test('TestHumanReadableBenchmarking2',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 198.19.201.71',
+ files('i-198.19.201.71')
+ ]
+)
+test('TestHumanReadableBenchmarking3',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 198.19.255.254',
+ files('i-198.19.255.254')
+ ]
+)
+test('TestHumanReadableMulticast',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 224.0.0.1',
+ files('i-224.0.0.1')
+ ]
+)
+test('TestHumanReadableReserved1',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 240.0.0.1',
+ files('i-240.0.0.1')
+ ]
+)
+test('TestHumanReadableReserved2',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 250.7.93.1',
+ files('i-250.7.93.1')
+ ]
+)
+test('TestHumanReadableReserved3',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 255.255.255.254',
+ files('i-255.255.255.254')
+ ]
+)
+test('TestHumanReadableLimitedBroadcast',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 255.255.255.255',
+ files('i-255.255.255.255')
+ ]
+)
+test('TestHumanReadableTranslat96',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 64:ff9b::2100:951a',
+ files('i-64:ff9b::2100:951a')
+ ]
+)
+test('TestHumanReadableTranslat48',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 64:ff9b:1:ea21:4316:55::1',
+ files('i-64:ff9b:1:ea21:4316:55::1')
+ ]
+)
+test('TestHumanReadableTEREDO',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2001:0000:50::d78a:0:c',
+ files('i-2001:0:50::d78a:0:c')
+ ]
+)
+test('TestHumanReadablePortControlProtocolAnycast',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2001:1::1',
+ files('i-2001:1::1')
+ ]
+)
+test('TestHumanReadableTraversalUsingRelays',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2001:1::2',
+ files('i-2001:1::2')
+ ]
+)
+test('TestHumanReadableBenchmarking',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2001:2:0:a::5:b7f',
+ files('i-2001:2:0:a::5:b7f')
+ ]
+)
+test('TestHumanReadableAMT',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2001:3:89:71::ab:1',
+ files('i-2001:3:89:71::ab:1')
+ ]
+)
+test('TestHumanReadableAS112v6',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2001:4:112::6483:bd12:9010',
+ files('i-2001:4:112::6483:bd12:9010')
+ ]
+)
+test('TestHumanReadableORCHID',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2001:1e:ab:7::',
+ files('i-2001:1e:ab:7::')
+ ]
+)
+test('TestHumanReadableORCHIDv2',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2001:2c:ab:7::',
+ files('i-2001:2c:ab:7::')
+ ]
+)
+test('TestHumanReadableDocumentation',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2001:db8:329::4a',
+ files('i-2001:db8:329::4a')
+ ]
+)
+test('TestHumanReadableIETFProtocolAssignments',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2001:190:70::e86a:0:b',
+ files('i-2001:190:70::e86a:0:b')
+ ]
+)
+test('TestHumanReadable6to4',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2002::34',
+ files('i-2002::34')
+ ]
+)
+test('TestHumanReadableDirectDelegationAS112Service',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 2620:4f:8000::7372:ad1',
+ files('i-2620:4f:8000::7372:ad1')
+ ]
+)
+test('TestHumanReadableUniqueLocalUnicast',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i fc00:0:a001::bcdf:4',
+ files('i-fc00:0:a001::bcdf:4')
+ ]
+)
+test('TestHumanReadableLinkScopedUnicast',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i fe80::b:0:7acd:0:5',
+ files('i-fe80::b:0:7acd:0:5')
+ ]
+)
+test('TestHumanReadableGenericInfoPrefix48',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i fd0b:a336:4e7d::/48',
+ files('i-fd0b:a336:4e7d::-48')
+ ]
+)
+
+# --split advanced tests
+test('SplitLinesByNetworkIPv4',
+ testrunner,
+ args : [
+ '--test-equal',
+ ipcalc.full_path() + ' -S 29 192.168.5.0/24 | grep ^Network | wc -l | tr -d [:space:]',
+ ipcalc.full_path() + ' -S 29 192.168.5.0/24 | grep ^Total | cut -d: -f 2 | tr -d [:space:]'
+ ]
+)
+test('SplitLinesByNetworkIPv6',
+ testrunner,
+ args : [
+ '--test-equal',
+ ipcalc.full_path() + ' -S 120 fcfa:b4ca:f1d8:125b:dc00::/112 | grep ^Network | wc -l | tr -d [:space:]',
+ ipcalc.full_path() + ' -S 120 fcfa:b4ca:f1d8:125b:dc00::/112 | grep ^Total|cut -d: -f 2 | tr -d [:space:]'
+ ]
+)
+
+# --help test
+test('TestHelpCommand',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' --help'
+ ]
+)
+
+# --check loopback tests
+test('ValidateLoopbackIPv4',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -c 127.0.0.1'
+ ]
+)
+test('ValidateLoopbackExplicitIPv6',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -c -6 ::1'
+ ]
+)
+test('ValidateLoopbackIPv6',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -c ::1'
+ ]
+)
+
+# --check tests
+test('ValidatePrivateIPv4',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -c 192.168.1.1'
+ ]
+)
+test('ValidateAbbreviatedGlobalIPv6',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -c -6 2a01:198:200:300::2'
+ ]
+)
+test('ValidateExpandedGlobalIPv6',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -c -6 2a01:198:200:300:0000:0000:0000:2'
+ ]
+)
+test('ValidateCompleteGlobalIPv6',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -c -6 2a01:0198:0200:0300:0000:0000:0000:0002'
+ ]
+)
+test('ValidateLoopbackIPv6WithPrefix',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -c -6 ::1/128'
+ ]
+)
+test('ValidateReservedIPv6WithPrefix',
+ testrunner,
+ args : [
+ '--test-success',
+ ipcalc.full_path() + ' -c -6 fec0::1:0:0:c0a8:8002/64'
+ ]
+)
+
+# --check invalid input tests
+test('NoValidateInvalidHexIPv6',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -c -6 gggg::'
+ ]
+)
+# FIXME: This test case unexpectedly works, so it is disabled for now.
+#test('NoValidateInvalidBroadcastIPv6',
+# testrunner,
+# args : [
+# '--test-failure',
+# ipcalc.full_path() + ' -b -6 ::1/128'
+# ]
+#)
+test('NoAllowIPv4AndIPv6',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -4 -6 2a01:198:200:300:0000:0000:0000:2'
+ ]
+)
+test('NoValidateIPv6InIPv4Mode',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -c -4 2a01:198:200:300:0000:0000:0000:2'
+ ]
+)
+test('NoValidateIPv4AndIPv6WithIPv4Address',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -c -4 -6 127.0.0.1'
+ ]
+)
+test('NoValidateInvalidPrefixIPv6',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -c ::1/999'
+ ]
+)
+
+# --netmask invalid input tests
+test('NoValidateNegativePrefix',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -m 192.168.1.1/-1'
+ ]
+)
+test('NoValidateIPv6PrefixInIPv4Mode',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -m 192.168.1.1/64'
+ ]
+)
+test('NoValidateInvalidPrefixIPv4',
+ testrunner,
+ args : [
+ '--test-failure',
+ ipcalc.full_path() + ' -m 192.168.1.1/99999'
+ ]
+)
+
+# --broadcast output tests
+test('CalculateBroadcastAddressFromPrefixIPv4',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -b 192.168.1.1/24',
+ 'BROADCAST=192.168.1.255'
+ ]
+)
+test('CalculateBroadcastAddressFromNetmaskIPv4',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -b 192.168.1.1 255.255.255.0',
+ 'BROADCAST=192.168.1.255'
+ ]
+)
+
+# --netmask output tests
+test('CalculateNetmaskPrefix24',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -m 192.168.1.1/24',
+ 'NETMASK=255.255.255.0'
+ ]
+)
+test('CalculateNetmaskPrefix22',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -m 172.16.59.222/22',
+ 'NETMASK=255.255.252.0'
+ ]
+)
+test('CalculateNetmaskNoPrefix',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -m 192.168.1.1',
+ 'NETMASK=255.255.255.255'
+ ]
+)
+
+# --prefix output tests
+test('CalculatePrefix24FromNetmask',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -p 192.168.1.1 255.255.255.0',
+ 'PREFIX=24'
+ ]
+)
+test('CalculatePrefix32FromNetmask',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -p 192.168.1.1 255.255.255.255',
+ 'PREFIX=32'
+ ]
+)
+test('CalculatePrefix0FromNetmask',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -p 192.168.1.1 0.0.0.0',
+ 'PREFIX=0'
+ ]
+)
+test('CalculatePrefix22FromNetmask',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -p 172.16.59.222 255.255.252.0',
+ 'PREFIX=22'
+ ]
+)
+
+# --class-prefix output tests
+test('CalculateClassNetmask24',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --class-prefix -m 192.168.1.1',
+ 'NETMASK=255.255.255.0'
+ ]
+)
+test('CalculateClassNetmask8',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --class-prefix -m 10.1.2.3',
+ 'NETMASK=255.0.0.0'
+ ]
+)
+test('CalculateClassNetmask16',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --class-prefix -m 129.22.4.3',
+ 'NETMASK=255.255.0.0'
+ ]
+)
+
+# --network output tests
+test('CalculateNetworkFromPrefix32',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -n 192.168.1.1/32',
+ 'NETWORK=192.168.1.1'
+ ]
+)
+test('CalculateNetworkFromPrefix0',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' -n 192.168.1.1/0',
+ 'NETWORK=0.0.0.0'
+ ]
+)
+
+# --reverse-dns output tests
+test('LookupReverseDNSFromPrefix32IPv4',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --reverse-dns 193.92.150.3/32',
+ 'REVERSEDNS=3.150.92.193.in-addr.arpa.'
+ ]
+)
+test('LookupReverseDNSFromPrefix26IPv4',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --reverse-dns 193.92.150.3/26',
+ 'REVERSEDNS=0-63.150.92.193.in-addr.arpa.'
+ ]
+)
+test('LookupReverseDNSFromPrefix16IPv4',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --reverse-dns 193.92.150.3/16',
+ 'REVERSEDNS=92.193.in-addr.arpa.'
+ ]
+)
+test('LookupReverseDNSFromPrefix12IPv4',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --reverse-dns 193.92.150.3/12',
+ 'REVERSEDNS=80-95.193.in-addr.arpa.'
+ ]
+)
+test('LookupReverseDNS4321IPv6',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --reverse-dns 4321:0:1:2:3:4:567:89ab',
+ 'REVERSEDNS=b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.ip6.arpa.'
+ ]
+)
+test('LookupReverseDNSFirstIPv6',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --reverse-dns 1::',
+ 'REVERSEDNS=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.1.0.0.0.ip6.arpa.'
+ ]
+)
+test('LookupReverseDNSLoopbackIPv6',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --reverse-dns ::1',
+ 'REVERSEDNS=1.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.ip6.arpa.'
+ ]
+)
+test('LookupReverseDNSFromPrefix128IPv6',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --reverse-dns 1234::4321/128',
+ 'REVERSEDNS=1.2.3.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.3.2.1.ip6.arpa.'
+ ]
+)
+test('LookupReverseDNSFromPrefix124IPv6',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --reverse-dns 1234::4321/124',
+ 'REVERSEDNS=2.3.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.3.2.1.ip6.arpa.'
+ ]
+)
+test('LookupReverseDNSFromPrefix120IPv6',
+ testrunner,
+ args : [
+ '--test-output',
+ ipcalc.full_path() + ' --reverse-dns 1234::4321/120',
+ 'REVERSEDNS=3.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.3.2.1.ip6.arpa.'
+ ]
+)
+
+# specific info decorated & no-decorate test
+test('SpecificInfoOutput',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -abmnp --minaddr --maxaddr --addresses 192.168.2.6/24',
+ files('192.168.2.6')
+ ]
+)
+test('SpecificInfoOutputNoDecorate',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -abmnp --minaddr --maxaddr --addresses --no-decorate 192.168.2.7/24',
+ files('192.168.2.7')
+ ]
+)
+
+# --json output tests
+test('JsonSplitPrefix24',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j -S 24 10.10.10.0/16',
+ files('json-split-10.10.10.0-16-24')
+ ]
+)
+test('JsonSplitPrefix26',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j -S 26 192.168.5.45/24',
+ files('json-split-192.168.5.45-24-26')
+ ]
+)
+test('JsonNoDecorateSplitPrefix24',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j --no-decorate -S 24 10.10.10.0/16',
+ files('json-nsplit-10.10.10.0-16-24')
+ ]
+)
+test('JsonNoDecorateSplitPrefix26',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j --no-decorate -S 26 192.168.5.45/24',
+ files('json-nsplit-192.168.5.45-24-26')
+ ]
+)
+test('JsonSplitPrefix64',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j -S 64 2a03:2880:20:4f06:face::/56',
+ files('json-nsplit-2a03:2880:20:4f06:face::-56-64')
+ ]
+)
+test('JsonNoDecorateSplitPrefix64',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j --no-decorate -S 64 2a03:2880:20:4f06:face::/56',
+ files('json-nsplit-2a03:2880:20:4f06:face::-56-64')
+ ]
+)
+test('JsonTestHumanReadableGenericInfoPrefix56',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j -i 2a03:2880:20:4f06:face:b00c:0:1/56',
+ files('json-i-2a03:2880:20:4f06:face:b00c:0:1-56')
+ ]
+)
+test('JsonTestHumanReadableSpecificInfo',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j -n 2a03:2880:20:4f06:face:b00c:0:1/56',
+ files('json-i-2a03:2880:20:4f06:face:b00c:0:1-56')
+ ]
+)
+test('AllInfo',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --all-info 192.168.2.7/24',
+ files('all-info-192.168.2.7')
+ ]
+)
+test('Info',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -i 192.168.2.7/24',
+ files('info-192.168.2.7')
+ ]
+)
+test('InfoImplicit',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' 192.168.2.7/24',
+ files('info-192.168.2.7')
+ ]
+)
+
+# --deagrregate tests
+test('DeaggregateNoDecorate',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -d 192.168.2.7-192.168.2.13',
+ files('deaggregate-192.168.2.7-192.168.2.13')
+ ]
+)
+test('Deaggregate',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -d 192.168.2.0-192.168.3.255',
+ files('deaggregate-192.168.2.0-192.168.3.255')
+ ]
+)
+test('DeaggregateSpaces',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -d " 192.168.2.0 - 192.168.3.255 "',
+ files('deaggregate-192.168.2.0-192.168.3.255')
+ ]
+)
+test('DeaggregateJson',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j -d 192.168.2.33-192.168.3.2',
+ files('deaggregate-192.168.2.33-192.168.3.2')
+ ]
+)
+test('DeaggregateIPv6NoDecorate',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate -d 2a03:2880:20:4f06:face::0-2a03:2880:20:4f06:face::fffe',
+ files('deaggregate-2a03:2880:20:4f06:face::0-2a03:2880:20:4f06:face::fffe')
+ ]
+)
+test('DeaggregateIPv6',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -d fcd3:57d1:733:c18f:b498:25e1:788:0-fcd3:57d1:733:c18f:b498:25e1:788:ffff',
+ files('deaggregate-fcd3:57d1:733:c18f:b498:25e1:788:0-fcd3:57d1:733:c18f:b498:25e1:788:ffff')
+ ]
+)
+test('DeaggregateIPv6Json',
+ testrunner,
+ args : [
+ '--test-outfile',
+ ipcalc.full_path() + ' -j -d fcd3:57d1:733:c18f:b498:25e1:788:f-fcd3:57d1:733:c18f:b498:25e1:789:ffa9',
+ files('deaggregate-fcd3:57d1:733:c18f:b498:25e1:788:f-fcd3:57d1:733:c18f:b498:25e1:789:ffa9')
+ ]
+)
+test('StandardInfo',
+ testrunner,
+ args : [ '--test-outfile',
+ ipcalc.full_path() + ' 192.168.2.0/24',
+ files('standard-192.168.2.0-24')
+ ]
+)
+test('NoDecorateInfo',
+ testrunner,
+ args : [ '--test-outfile',
+ ipcalc.full_path() + ' --no-decorate 192.168.2.0/24',
+ files('no-decorate-192.168.2.0-24')
+ ]
+)
+test('NoDecorateAllInfo',
+ testrunner,
+ args : [ '--test-outfile',
+ ipcalc.full_path() + ' --all-info --no-decorate 192.168.2.0/24',
+ files('no-decorate-all-info-192.168.2.0-24')
+ ]
+)
+# Test whether we can deaggregate a randomly generated network
+test('DeaggregateIPv6Random',
+ find_program('ipcalc-delegate-ipv6-random.sh'),
+ env : ['IPCALC=' + ipcalc.full_path()]
+)
+test('DeaggregateSplitIPv6',
+ find_program('ipcalc-delegate-split-ipv6.sh'),
+ env : ['IPCALC=' + ipcalc.full_path()]
+)
+test('DeaggregateSplitIPv4',
+ find_program('ipcalc-delegate-split-ipv4.sh'),
+ env : ['IPCALC=' + ipcalc.full_path()]
+)
diff --git a/tests/no-decorate-192.168.2.0-24 b/tests/no-decorate-192.168.2.0-24
new file mode 100644
index 0000000..588b5fe
--- /dev/null
+++ b/tests/no-decorate-192.168.2.0-24
@@ -0,0 +1,8 @@
+Network: 192.168.2.0/24
+Netmask: 255.255.255.0 = 24
+Broadcast: 192.168.2.255
+
+Address space: Private Use
+HostMin: 192.168.2.1
+HostMax: 192.168.2.254
+Hosts/Net: 254
diff --git a/tests/no-decorate-all-info-192.168.2.0-24 b/tests/no-decorate-all-info-192.168.2.0-24
new file mode 100644
index 0000000..5f1efdf
--- /dev/null
+++ b/tests/no-decorate-all-info-192.168.2.0-24
@@ -0,0 +1,10 @@
+Network: 192.168.2.0/24
+Netmask: 255.255.255.0 = 24
+Broadcast: 192.168.2.255
+Reverse DNS: 2.168.192.in-addr.arpa.
+
+Address space: Private Use
+Address class: Class C
+HostMin: 192.168.2.1
+HostMax: 192.168.2.254
+Hosts/Net: 254
diff --git a/tests/nsplit-10.10.10.0-16-18 b/tests/nsplit-10.10.10.0-16-18
new file mode 100644
index 0000000..071670d
--- /dev/null
+++ b/tests/nsplit-10.10.10.0-16-18
@@ -0,0 +1,4 @@
+10.10.0.0/18
+10.10.64.0/18
+10.10.128.0/18
+10.10.192.0/18
diff --git a/tests/nsplit-10.10.10.0-16-24 b/tests/nsplit-10.10.10.0-16-24
new file mode 100644
index 0000000..6335c3a
--- /dev/null
+++ b/tests/nsplit-10.10.10.0-16-24
@@ -0,0 +1,256 @@
+10.10.0.0/24
+10.10.1.0/24
+10.10.2.0/24
+10.10.3.0/24
+10.10.4.0/24
+10.10.5.0/24
+10.10.6.0/24
+10.10.7.0/24
+10.10.8.0/24
+10.10.9.0/24
+10.10.10.0/24
+10.10.11.0/24
+10.10.12.0/24
+10.10.13.0/24
+10.10.14.0/24
+10.10.15.0/24
+10.10.16.0/24
+10.10.17.0/24
+10.10.18.0/24
+10.10.19.0/24
+10.10.20.0/24
+10.10.21.0/24
+10.10.22.0/24
+10.10.23.0/24
+10.10.24.0/24
+10.10.25.0/24
+10.10.26.0/24
+10.10.27.0/24
+10.10.28.0/24
+10.10.29.0/24
+10.10.30.0/24
+10.10.31.0/24
+10.10.32.0/24
+10.10.33.0/24
+10.10.34.0/24
+10.10.35.0/24
+10.10.36.0/24
+10.10.37.0/24
+10.10.38.0/24
+10.10.39.0/24
+10.10.40.0/24
+10.10.41.0/24
+10.10.42.0/24
+10.10.43.0/24
+10.10.44.0/24
+10.10.45.0/24
+10.10.46.0/24
+10.10.47.0/24
+10.10.48.0/24
+10.10.49.0/24
+10.10.50.0/24
+10.10.51.0/24
+10.10.52.0/24
+10.10.53.0/24
+10.10.54.0/24
+10.10.55.0/24
+10.10.56.0/24
+10.10.57.0/24
+10.10.58.0/24
+10.10.59.0/24
+10.10.60.0/24
+10.10.61.0/24
+10.10.62.0/24
+10.10.63.0/24
+10.10.64.0/24
+10.10.65.0/24
+10.10.66.0/24
+10.10.67.0/24
+10.10.68.0/24
+10.10.69.0/24
+10.10.70.0/24
+10.10.71.0/24
+10.10.72.0/24
+10.10.73.0/24
+10.10.74.0/24
+10.10.75.0/24
+10.10.76.0/24
+10.10.77.0/24
+10.10.78.0/24
+10.10.79.0/24
+10.10.80.0/24
+10.10.81.0/24
+10.10.82.0/24
+10.10.83.0/24
+10.10.84.0/24
+10.10.85.0/24
+10.10.86.0/24
+10.10.87.0/24
+10.10.88.0/24
+10.10.89.0/24
+10.10.90.0/24
+10.10.91.0/24
+10.10.92.0/24
+10.10.93.0/24
+10.10.94.0/24
+10.10.95.0/24
+10.10.96.0/24
+10.10.97.0/24
+10.10.98.0/24
+10.10.99.0/24
+10.10.100.0/24
+10.10.101.0/24
+10.10.102.0/24
+10.10.103.0/24
+10.10.104.0/24
+10.10.105.0/24
+10.10.106.0/24
+10.10.107.0/24
+10.10.108.0/24
+10.10.109.0/24
+10.10.110.0/24
+10.10.111.0/24
+10.10.112.0/24
+10.10.113.0/24
+10.10.114.0/24
+10.10.115.0/24
+10.10.116.0/24
+10.10.117.0/24
+10.10.118.0/24
+10.10.119.0/24
+10.10.120.0/24
+10.10.121.0/24
+10.10.122.0/24
+10.10.123.0/24
+10.10.124.0/24
+10.10.125.0/24
+10.10.126.0/24
+10.10.127.0/24
+10.10.128.0/24
+10.10.129.0/24
+10.10.130.0/24
+10.10.131.0/24
+10.10.132.0/24
+10.10.133.0/24
+10.10.134.0/24
+10.10.135.0/24
+10.10.136.0/24
+10.10.137.0/24
+10.10.138.0/24
+10.10.139.0/24
+10.10.140.0/24
+10.10.141.0/24
+10.10.142.0/24
+10.10.143.0/24
+10.10.144.0/24
+10.10.145.0/24
+10.10.146.0/24
+10.10.147.0/24
+10.10.148.0/24
+10.10.149.0/24
+10.10.150.0/24
+10.10.151.0/24
+10.10.152.0/24
+10.10.153.0/24
+10.10.154.0/24
+10.10.155.0/24
+10.10.156.0/24
+10.10.157.0/24
+10.10.158.0/24
+10.10.159.0/24
+10.10.160.0/24
+10.10.161.0/24
+10.10.162.0/24
+10.10.163.0/24
+10.10.164.0/24
+10.10.165.0/24
+10.10.166.0/24
+10.10.167.0/24
+10.10.168.0/24
+10.10.169.0/24
+10.10.170.0/24
+10.10.171.0/24
+10.10.172.0/24
+10.10.173.0/24
+10.10.174.0/24
+10.10.175.0/24
+10.10.176.0/24
+10.10.177.0/24
+10.10.178.0/24
+10.10.179.0/24
+10.10.180.0/24
+10.10.181.0/24
+10.10.182.0/24
+10.10.183.0/24
+10.10.184.0/24
+10.10.185.0/24
+10.10.186.0/24
+10.10.187.0/24
+10.10.188.0/24
+10.10.189.0/24
+10.10.190.0/24
+10.10.191.0/24
+10.10.192.0/24
+10.10.193.0/24
+10.10.194.0/24
+10.10.195.0/24
+10.10.196.0/24
+10.10.197.0/24
+10.10.198.0/24
+10.10.199.0/24
+10.10.200.0/24
+10.10.201.0/24
+10.10.202.0/24
+10.10.203.0/24
+10.10.204.0/24
+10.10.205.0/24
+10.10.206.0/24
+10.10.207.0/24
+10.10.208.0/24
+10.10.209.0/24
+10.10.210.0/24
+10.10.211.0/24
+10.10.212.0/24
+10.10.213.0/24
+10.10.214.0/24
+10.10.215.0/24
+10.10.216.0/24
+10.10.217.0/24
+10.10.218.0/24
+10.10.219.0/24
+10.10.220.0/24
+10.10.221.0/24
+10.10.222.0/24
+10.10.223.0/24
+10.10.224.0/24
+10.10.225.0/24
+10.10.226.0/24
+10.10.227.0/24
+10.10.228.0/24
+10.10.229.0/24
+10.10.230.0/24
+10.10.231.0/24
+10.10.232.0/24
+10.10.233.0/24
+10.10.234.0/24
+10.10.235.0/24
+10.10.236.0/24
+10.10.237.0/24
+10.10.238.0/24
+10.10.239.0/24
+10.10.240.0/24
+10.10.241.0/24
+10.10.242.0/24
+10.10.243.0/24
+10.10.244.0/24
+10.10.245.0/24
+10.10.246.0/24
+10.10.247.0/24
+10.10.248.0/24
+10.10.249.0/24
+10.10.250.0/24
+10.10.251.0/24
+10.10.252.0/24
+10.10.253.0/24
+10.10.254.0/24
+10.10.255.0/24
diff --git a/tests/nsplit-192.168.5.0-24-29 b/tests/nsplit-192.168.5.0-24-29
new file mode 100644
index 0000000..3cc2f57
--- /dev/null
+++ b/tests/nsplit-192.168.5.0-24-29
@@ -0,0 +1,32 @@
+192.168.5.0/29
+192.168.5.8/29
+192.168.5.16/29
+192.168.5.24/29
+192.168.5.32/29
+192.168.5.40/29
+192.168.5.48/29
+192.168.5.56/29
+192.168.5.64/29
+192.168.5.72/29
+192.168.5.80/29
+192.168.5.88/29
+192.168.5.96/29
+192.168.5.104/29
+192.168.5.112/29
+192.168.5.120/29
+192.168.5.128/29
+192.168.5.136/29
+192.168.5.144/29
+192.168.5.152/29
+192.168.5.160/29
+192.168.5.168/29
+192.168.5.176/29
+192.168.5.184/29
+192.168.5.192/29
+192.168.5.200/29
+192.168.5.208/29
+192.168.5.216/29
+192.168.5.224/29
+192.168.5.232/29
+192.168.5.240/29
+192.168.5.248/29
diff --git a/tests/nsplit-192.168.5.0-24-31 b/tests/nsplit-192.168.5.0-24-31
new file mode 100644
index 0000000..3a1239c
--- /dev/null
+++ b/tests/nsplit-192.168.5.0-24-31
@@ -0,0 +1,128 @@
+192.168.5.0/31
+192.168.5.2/31
+192.168.5.4/31
+192.168.5.6/31
+192.168.5.8/31
+192.168.5.10/31
+192.168.5.12/31
+192.168.5.14/31
+192.168.5.16/31
+192.168.5.18/31
+192.168.5.20/31
+192.168.5.22/31
+192.168.5.24/31
+192.168.5.26/31
+192.168.5.28/31
+192.168.5.30/31
+192.168.5.32/31
+192.168.5.34/31
+192.168.5.36/31
+192.168.5.38/31
+192.168.5.40/31
+192.168.5.42/31
+192.168.5.44/31
+192.168.5.46/31
+192.168.5.48/31
+192.168.5.50/31
+192.168.5.52/31
+192.168.5.54/31
+192.168.5.56/31
+192.168.5.58/31
+192.168.5.60/31
+192.168.5.62/31
+192.168.5.64/31
+192.168.5.66/31
+192.168.5.68/31
+192.168.5.70/31
+192.168.5.72/31
+192.168.5.74/31
+192.168.5.76/31
+192.168.5.78/31
+192.168.5.80/31
+192.168.5.82/31
+192.168.5.84/31
+192.168.5.86/31
+192.168.5.88/31
+192.168.5.90/31
+192.168.5.92/31
+192.168.5.94/31
+192.168.5.96/31
+192.168.5.98/31
+192.168.5.100/31
+192.168.5.102/31
+192.168.5.104/31
+192.168.5.106/31
+192.168.5.108/31
+192.168.5.110/31
+192.168.5.112/31
+192.168.5.114/31
+192.168.5.116/31
+192.168.5.118/31
+192.168.5.120/31
+192.168.5.122/31
+192.168.5.124/31
+192.168.5.126/31
+192.168.5.128/31
+192.168.5.130/31
+192.168.5.132/31
+192.168.5.134/31
+192.168.5.136/31
+192.168.5.138/31
+192.168.5.140/31
+192.168.5.142/31
+192.168.5.144/31
+192.168.5.146/31
+192.168.5.148/31
+192.168.5.150/31
+192.168.5.152/31
+192.168.5.154/31
+192.168.5.156/31
+192.168.5.158/31
+192.168.5.160/31
+192.168.5.162/31
+192.168.5.164/31
+192.168.5.166/31
+192.168.5.168/31
+192.168.5.170/31
+192.168.5.172/31
+192.168.5.174/31
+192.168.5.176/31
+192.168.5.178/31
+192.168.5.180/31
+192.168.5.182/31
+192.168.5.184/31
+192.168.5.186/31
+192.168.5.188/31
+192.168.5.190/31
+192.168.5.192/31
+192.168.5.194/31
+192.168.5.196/31
+192.168.5.198/31
+192.168.5.200/31
+192.168.5.202/31
+192.168.5.204/31
+192.168.5.206/31
+192.168.5.208/31
+192.168.5.210/31
+192.168.5.212/31
+192.168.5.214/31
+192.168.5.216/31
+192.168.5.218/31
+192.168.5.220/31
+192.168.5.222/31
+192.168.5.224/31
+192.168.5.226/31
+192.168.5.228/31
+192.168.5.230/31
+192.168.5.232/31
+192.168.5.234/31
+192.168.5.236/31
+192.168.5.238/31
+192.168.5.240/31
+192.168.5.242/31
+192.168.5.244/31
+192.168.5.246/31
+192.168.5.248/31
+192.168.5.250/31
+192.168.5.252/31
+192.168.5.254/31
diff --git a/tests/nsplit-192.168.5.0-24-32 b/tests/nsplit-192.168.5.0-24-32
new file mode 100644
index 0000000..38490b9
--- /dev/null
+++ b/tests/nsplit-192.168.5.0-24-32
@@ -0,0 +1,256 @@
+192.168.5.0/32
+192.168.5.1/32
+192.168.5.2/32
+192.168.5.3/32
+192.168.5.4/32
+192.168.5.5/32
+192.168.5.6/32
+192.168.5.7/32
+192.168.5.8/32
+192.168.5.9/32
+192.168.5.10/32
+192.168.5.11/32
+192.168.5.12/32
+192.168.5.13/32
+192.168.5.14/32
+192.168.5.15/32
+192.168.5.16/32
+192.168.5.17/32
+192.168.5.18/32
+192.168.5.19/32
+192.168.5.20/32
+192.168.5.21/32
+192.168.5.22/32
+192.168.5.23/32
+192.168.5.24/32
+192.168.5.25/32
+192.168.5.26/32
+192.168.5.27/32
+192.168.5.28/32
+192.168.5.29/32
+192.168.5.30/32
+192.168.5.31/32
+192.168.5.32/32
+192.168.5.33/32
+192.168.5.34/32
+192.168.5.35/32
+192.168.5.36/32
+192.168.5.37/32
+192.168.5.38/32
+192.168.5.39/32
+192.168.5.40/32
+192.168.5.41/32
+192.168.5.42/32
+192.168.5.43/32
+192.168.5.44/32
+192.168.5.45/32
+192.168.5.46/32
+192.168.5.47/32
+192.168.5.48/32
+192.168.5.49/32
+192.168.5.50/32
+192.168.5.51/32
+192.168.5.52/32
+192.168.5.53/32
+192.168.5.54/32
+192.168.5.55/32
+192.168.5.56/32
+192.168.5.57/32
+192.168.5.58/32
+192.168.5.59/32
+192.168.5.60/32
+192.168.5.61/32
+192.168.5.62/32
+192.168.5.63/32
+192.168.5.64/32
+192.168.5.65/32
+192.168.5.66/32
+192.168.5.67/32
+192.168.5.68/32
+192.168.5.69/32
+192.168.5.70/32
+192.168.5.71/32
+192.168.5.72/32
+192.168.5.73/32
+192.168.5.74/32
+192.168.5.75/32
+192.168.5.76/32
+192.168.5.77/32
+192.168.5.78/32
+192.168.5.79/32
+192.168.5.80/32
+192.168.5.81/32
+192.168.5.82/32
+192.168.5.83/32
+192.168.5.84/32
+192.168.5.85/32
+192.168.5.86/32
+192.168.5.87/32
+192.168.5.88/32
+192.168.5.89/32
+192.168.5.90/32
+192.168.5.91/32
+192.168.5.92/32
+192.168.5.93/32
+192.168.5.94/32
+192.168.5.95/32
+192.168.5.96/32
+192.168.5.97/32
+192.168.5.98/32
+192.168.5.99/32
+192.168.5.100/32
+192.168.5.101/32
+192.168.5.102/32
+192.168.5.103/32
+192.168.5.104/32
+192.168.5.105/32
+192.168.5.106/32
+192.168.5.107/32
+192.168.5.108/32
+192.168.5.109/32
+192.168.5.110/32
+192.168.5.111/32
+192.168.5.112/32
+192.168.5.113/32
+192.168.5.114/32
+192.168.5.115/32
+192.168.5.116/32
+192.168.5.117/32
+192.168.5.118/32
+192.168.5.119/32
+192.168.5.120/32
+192.168.5.121/32
+192.168.5.122/32
+192.168.5.123/32
+192.168.5.124/32
+192.168.5.125/32
+192.168.5.126/32
+192.168.5.127/32
+192.168.5.128/32
+192.168.5.129/32
+192.168.5.130/32
+192.168.5.131/32
+192.168.5.132/32
+192.168.5.133/32
+192.168.5.134/32
+192.168.5.135/32
+192.168.5.136/32
+192.168.5.137/32
+192.168.5.138/32
+192.168.5.139/32
+192.168.5.140/32
+192.168.5.141/32
+192.168.5.142/32
+192.168.5.143/32
+192.168.5.144/32
+192.168.5.145/32
+192.168.5.146/32
+192.168.5.147/32
+192.168.5.148/32
+192.168.5.149/32
+192.168.5.150/32
+192.168.5.151/32
+192.168.5.152/32
+192.168.5.153/32
+192.168.5.154/32
+192.168.5.155/32
+192.168.5.156/32
+192.168.5.157/32
+192.168.5.158/32
+192.168.5.159/32
+192.168.5.160/32
+192.168.5.161/32
+192.168.5.162/32
+192.168.5.163/32
+192.168.5.164/32
+192.168.5.165/32
+192.168.5.166/32
+192.168.5.167/32
+192.168.5.168/32
+192.168.5.169/32
+192.168.5.170/32
+192.168.5.171/32
+192.168.5.172/32
+192.168.5.173/32
+192.168.5.174/32
+192.168.5.175/32
+192.168.5.176/32
+192.168.5.177/32
+192.168.5.178/32
+192.168.5.179/32
+192.168.5.180/32
+192.168.5.181/32
+192.168.5.182/32
+192.168.5.183/32
+192.168.5.184/32
+192.168.5.185/32
+192.168.5.186/32
+192.168.5.187/32
+192.168.5.188/32
+192.168.5.189/32
+192.168.5.190/32
+192.168.5.191/32
+192.168.5.192/32
+192.168.5.193/32
+192.168.5.194/32
+192.168.5.195/32
+192.168.5.196/32
+192.168.5.197/32
+192.168.5.198/32
+192.168.5.199/32
+192.168.5.200/32
+192.168.5.201/32
+192.168.5.202/32
+192.168.5.203/32
+192.168.5.204/32
+192.168.5.205/32
+192.168.5.206/32
+192.168.5.207/32
+192.168.5.208/32
+192.168.5.209/32
+192.168.5.210/32
+192.168.5.211/32
+192.168.5.212/32
+192.168.5.213/32
+192.168.5.214/32
+192.168.5.215/32
+192.168.5.216/32
+192.168.5.217/32
+192.168.5.218/32
+192.168.5.219/32
+192.168.5.220/32
+192.168.5.221/32
+192.168.5.222/32
+192.168.5.223/32
+192.168.5.224/32
+192.168.5.225/32
+192.168.5.226/32
+192.168.5.227/32
+192.168.5.228/32
+192.168.5.229/32
+192.168.5.230/32
+192.168.5.231/32
+192.168.5.232/32
+192.168.5.233/32
+192.168.5.234/32
+192.168.5.235/32
+192.168.5.236/32
+192.168.5.237/32
+192.168.5.238/32
+192.168.5.239/32
+192.168.5.240/32
+192.168.5.241/32
+192.168.5.242/32
+192.168.5.243/32
+192.168.5.244/32
+192.168.5.245/32
+192.168.5.246/32
+192.168.5.247/32
+192.168.5.248/32
+192.168.5.249/32
+192.168.5.250/32
+192.168.5.251/32
+192.168.5.252/32
+192.168.5.253/32
+192.168.5.254/32
+192.168.5.255/32
diff --git a/tests/nsplit-192.168.5.0-31-32 b/tests/nsplit-192.168.5.0-31-32
new file mode 100644
index 0000000..da706e2
--- /dev/null
+++ b/tests/nsplit-192.168.5.0-31-32
@@ -0,0 +1,2 @@
+192.168.5.0/32
+192.168.5.1/32
diff --git a/tests/nsplit-192.168.5.45-24-26 b/tests/nsplit-192.168.5.45-24-26
new file mode 100644
index 0000000..edfe2fc
--- /dev/null
+++ b/tests/nsplit-192.168.5.45-24-26
@@ -0,0 +1,4 @@
+192.168.5.0/26
+192.168.5.64/26
+192.168.5.128/26
+192.168.5.192/26
diff --git a/tests/nsplit-2a03:2880:20:4f06:face::-56-64 b/tests/nsplit-2a03:2880:20:4f06:face::-56-64
new file mode 100644
index 0000000..e69ed62
--- /dev/null
+++ b/tests/nsplit-2a03:2880:20:4f06:face::-56-64
@@ -0,0 +1,256 @@
+2a03:2880:20:4f00::/64
+2a03:2880:20:4f01::/64
+2a03:2880:20:4f02::/64
+2a03:2880:20:4f03::/64
+2a03:2880:20:4f04::/64
+2a03:2880:20:4f05::/64
+2a03:2880:20:4f06::/64
+2a03:2880:20:4f07::/64
+2a03:2880:20:4f08::/64
+2a03:2880:20:4f09::/64
+2a03:2880:20:4f0a::/64
+2a03:2880:20:4f0b::/64
+2a03:2880:20:4f0c::/64
+2a03:2880:20:4f0d::/64
+2a03:2880:20:4f0e::/64
+2a03:2880:20:4f0f::/64
+2a03:2880:20:4f10::/64
+2a03:2880:20:4f11::/64
+2a03:2880:20:4f12::/64
+2a03:2880:20:4f13::/64
+2a03:2880:20:4f14::/64
+2a03:2880:20:4f15::/64
+2a03:2880:20:4f16::/64
+2a03:2880:20:4f17::/64
+2a03:2880:20:4f18::/64
+2a03:2880:20:4f19::/64
+2a03:2880:20:4f1a::/64
+2a03:2880:20:4f1b::/64
+2a03:2880:20:4f1c::/64
+2a03:2880:20:4f1d::/64
+2a03:2880:20:4f1e::/64
+2a03:2880:20:4f1f::/64
+2a03:2880:20:4f20::/64
+2a03:2880:20:4f21::/64
+2a03:2880:20:4f22::/64
+2a03:2880:20:4f23::/64
+2a03:2880:20:4f24::/64
+2a03:2880:20:4f25::/64
+2a03:2880:20:4f26::/64
+2a03:2880:20:4f27::/64
+2a03:2880:20:4f28::/64
+2a03:2880:20:4f29::/64
+2a03:2880:20:4f2a::/64
+2a03:2880:20:4f2b::/64
+2a03:2880:20:4f2c::/64
+2a03:2880:20:4f2d::/64
+2a03:2880:20:4f2e::/64
+2a03:2880:20:4f2f::/64
+2a03:2880:20:4f30::/64
+2a03:2880:20:4f31::/64
+2a03:2880:20:4f32::/64
+2a03:2880:20:4f33::/64
+2a03:2880:20:4f34::/64
+2a03:2880:20:4f35::/64
+2a03:2880:20:4f36::/64
+2a03:2880:20:4f37::/64
+2a03:2880:20:4f38::/64
+2a03:2880:20:4f39::/64
+2a03:2880:20:4f3a::/64
+2a03:2880:20:4f3b::/64
+2a03:2880:20:4f3c::/64
+2a03:2880:20:4f3d::/64
+2a03:2880:20:4f3e::/64
+2a03:2880:20:4f3f::/64
+2a03:2880:20:4f40::/64
+2a03:2880:20:4f41::/64
+2a03:2880:20:4f42::/64
+2a03:2880:20:4f43::/64
+2a03:2880:20:4f44::/64
+2a03:2880:20:4f45::/64
+2a03:2880:20:4f46::/64
+2a03:2880:20:4f47::/64
+2a03:2880:20:4f48::/64
+2a03:2880:20:4f49::/64
+2a03:2880:20:4f4a::/64
+2a03:2880:20:4f4b::/64
+2a03:2880:20:4f4c::/64
+2a03:2880:20:4f4d::/64
+2a03:2880:20:4f4e::/64
+2a03:2880:20:4f4f::/64
+2a03:2880:20:4f50::/64
+2a03:2880:20:4f51::/64
+2a03:2880:20:4f52::/64
+2a03:2880:20:4f53::/64
+2a03:2880:20:4f54::/64
+2a03:2880:20:4f55::/64
+2a03:2880:20:4f56::/64
+2a03:2880:20:4f57::/64
+2a03:2880:20:4f58::/64
+2a03:2880:20:4f59::/64
+2a03:2880:20:4f5a::/64
+2a03:2880:20:4f5b::/64
+2a03:2880:20:4f5c::/64
+2a03:2880:20:4f5d::/64
+2a03:2880:20:4f5e::/64
+2a03:2880:20:4f5f::/64
+2a03:2880:20:4f60::/64
+2a03:2880:20:4f61::/64
+2a03:2880:20:4f62::/64
+2a03:2880:20:4f63::/64
+2a03:2880:20:4f64::/64
+2a03:2880:20:4f65::/64
+2a03:2880:20:4f66::/64
+2a03:2880:20:4f67::/64
+2a03:2880:20:4f68::/64
+2a03:2880:20:4f69::/64
+2a03:2880:20:4f6a::/64
+2a03:2880:20:4f6b::/64
+2a03:2880:20:4f6c::/64
+2a03:2880:20:4f6d::/64
+2a03:2880:20:4f6e::/64
+2a03:2880:20:4f6f::/64
+2a03:2880:20:4f70::/64
+2a03:2880:20:4f71::/64
+2a03:2880:20:4f72::/64
+2a03:2880:20:4f73::/64
+2a03:2880:20:4f74::/64
+2a03:2880:20:4f75::/64
+2a03:2880:20:4f76::/64
+2a03:2880:20:4f77::/64
+2a03:2880:20:4f78::/64
+2a03:2880:20:4f79::/64
+2a03:2880:20:4f7a::/64
+2a03:2880:20:4f7b::/64
+2a03:2880:20:4f7c::/64
+2a03:2880:20:4f7d::/64
+2a03:2880:20:4f7e::/64
+2a03:2880:20:4f7f::/64
+2a03:2880:20:4f80::/64
+2a03:2880:20:4f81::/64
+2a03:2880:20:4f82::/64
+2a03:2880:20:4f83::/64
+2a03:2880:20:4f84::/64
+2a03:2880:20:4f85::/64
+2a03:2880:20:4f86::/64
+2a03:2880:20:4f87::/64
+2a03:2880:20:4f88::/64
+2a03:2880:20:4f89::/64
+2a03:2880:20:4f8a::/64
+2a03:2880:20:4f8b::/64
+2a03:2880:20:4f8c::/64
+2a03:2880:20:4f8d::/64
+2a03:2880:20:4f8e::/64
+2a03:2880:20:4f8f::/64
+2a03:2880:20:4f90::/64
+2a03:2880:20:4f91::/64
+2a03:2880:20:4f92::/64
+2a03:2880:20:4f93::/64
+2a03:2880:20:4f94::/64
+2a03:2880:20:4f95::/64
+2a03:2880:20:4f96::/64
+2a03:2880:20:4f97::/64
+2a03:2880:20:4f98::/64
+2a03:2880:20:4f99::/64
+2a03:2880:20:4f9a::/64
+2a03:2880:20:4f9b::/64
+2a03:2880:20:4f9c::/64
+2a03:2880:20:4f9d::/64
+2a03:2880:20:4f9e::/64
+2a03:2880:20:4f9f::/64
+2a03:2880:20:4fa0::/64
+2a03:2880:20:4fa1::/64
+2a03:2880:20:4fa2::/64
+2a03:2880:20:4fa3::/64
+2a03:2880:20:4fa4::/64
+2a03:2880:20:4fa5::/64
+2a03:2880:20:4fa6::/64
+2a03:2880:20:4fa7::/64
+2a03:2880:20:4fa8::/64
+2a03:2880:20:4fa9::/64
+2a03:2880:20:4faa::/64
+2a03:2880:20:4fab::/64
+2a03:2880:20:4fac::/64
+2a03:2880:20:4fad::/64
+2a03:2880:20:4fae::/64
+2a03:2880:20:4faf::/64
+2a03:2880:20:4fb0::/64
+2a03:2880:20:4fb1::/64
+2a03:2880:20:4fb2::/64
+2a03:2880:20:4fb3::/64
+2a03:2880:20:4fb4::/64
+2a03:2880:20:4fb5::/64
+2a03:2880:20:4fb6::/64
+2a03:2880:20:4fb7::/64
+2a03:2880:20:4fb8::/64
+2a03:2880:20:4fb9::/64
+2a03:2880:20:4fba::/64
+2a03:2880:20:4fbb::/64
+2a03:2880:20:4fbc::/64
+2a03:2880:20:4fbd::/64
+2a03:2880:20:4fbe::/64
+2a03:2880:20:4fbf::/64
+2a03:2880:20:4fc0::/64
+2a03:2880:20:4fc1::/64
+2a03:2880:20:4fc2::/64
+2a03:2880:20:4fc3::/64
+2a03:2880:20:4fc4::/64
+2a03:2880:20:4fc5::/64
+2a03:2880:20:4fc6::/64
+2a03:2880:20:4fc7::/64
+2a03:2880:20:4fc8::/64
+2a03:2880:20:4fc9::/64
+2a03:2880:20:4fca::/64
+2a03:2880:20:4fcb::/64
+2a03:2880:20:4fcc::/64
+2a03:2880:20:4fcd::/64
+2a03:2880:20:4fce::/64
+2a03:2880:20:4fcf::/64
+2a03:2880:20:4fd0::/64
+2a03:2880:20:4fd1::/64
+2a03:2880:20:4fd2::/64
+2a03:2880:20:4fd3::/64
+2a03:2880:20:4fd4::/64
+2a03:2880:20:4fd5::/64
+2a03:2880:20:4fd6::/64
+2a03:2880:20:4fd7::/64
+2a03:2880:20:4fd8::/64
+2a03:2880:20:4fd9::/64
+2a03:2880:20:4fda::/64
+2a03:2880:20:4fdb::/64
+2a03:2880:20:4fdc::/64
+2a03:2880:20:4fdd::/64
+2a03:2880:20:4fde::/64
+2a03:2880:20:4fdf::/64
+2a03:2880:20:4fe0::/64
+2a03:2880:20:4fe1::/64
+2a03:2880:20:4fe2::/64
+2a03:2880:20:4fe3::/64
+2a03:2880:20:4fe4::/64
+2a03:2880:20:4fe5::/64
+2a03:2880:20:4fe6::/64
+2a03:2880:20:4fe7::/64
+2a03:2880:20:4fe8::/64
+2a03:2880:20:4fe9::/64
+2a03:2880:20:4fea::/64
+2a03:2880:20:4feb::/64
+2a03:2880:20:4fec::/64
+2a03:2880:20:4fed::/64
+2a03:2880:20:4fee::/64
+2a03:2880:20:4fef::/64
+2a03:2880:20:4ff0::/64
+2a03:2880:20:4ff1::/64
+2a03:2880:20:4ff2::/64
+2a03:2880:20:4ff3::/64
+2a03:2880:20:4ff4::/64
+2a03:2880:20:4ff5::/64
+2a03:2880:20:4ff6::/64
+2a03:2880:20:4ff7::/64
+2a03:2880:20:4ff8::/64
+2a03:2880:20:4ff9::/64
+2a03:2880:20:4ffa::/64
+2a03:2880:20:4ffb::/64
+2a03:2880:20:4ffc::/64
+2a03:2880:20:4ffd::/64
+2a03:2880:20:4ffe::/64
+2a03:2880:20:4fff::/64
diff --git a/tests/nsplit-fcfa:b4ca:f1d8:125b:dc00::-112-120 b/tests/nsplit-fcfa:b4ca:f1d8:125b:dc00::-112-120
new file mode 100644
index 0000000..4987356
--- /dev/null
+++ b/tests/nsplit-fcfa:b4ca:f1d8:125b:dc00::-112-120
@@ -0,0 +1,256 @@
+fcfa:b4ca:f1d8:125b:dc00::/120
+fcfa:b4ca:f1d8:125b:dc00::100/120
+fcfa:b4ca:f1d8:125b:dc00::200/120
+fcfa:b4ca:f1d8:125b:dc00::300/120
+fcfa:b4ca:f1d8:125b:dc00::400/120
+fcfa:b4ca:f1d8:125b:dc00::500/120
+fcfa:b4ca:f1d8:125b:dc00::600/120
+fcfa:b4ca:f1d8:125b:dc00::700/120
+fcfa:b4ca:f1d8:125b:dc00::800/120
+fcfa:b4ca:f1d8:125b:dc00::900/120
+fcfa:b4ca:f1d8:125b:dc00::a00/120
+fcfa:b4ca:f1d8:125b:dc00::b00/120
+fcfa:b4ca:f1d8:125b:dc00::c00/120
+fcfa:b4ca:f1d8:125b:dc00::d00/120
+fcfa:b4ca:f1d8:125b:dc00::e00/120
+fcfa:b4ca:f1d8:125b:dc00::f00/120
+fcfa:b4ca:f1d8:125b:dc00::1000/120
+fcfa:b4ca:f1d8:125b:dc00::1100/120
+fcfa:b4ca:f1d8:125b:dc00::1200/120
+fcfa:b4ca:f1d8:125b:dc00::1300/120
+fcfa:b4ca:f1d8:125b:dc00::1400/120
+fcfa:b4ca:f1d8:125b:dc00::1500/120
+fcfa:b4ca:f1d8:125b:dc00::1600/120
+fcfa:b4ca:f1d8:125b:dc00::1700/120
+fcfa:b4ca:f1d8:125b:dc00::1800/120
+fcfa:b4ca:f1d8:125b:dc00::1900/120
+fcfa:b4ca:f1d8:125b:dc00::1a00/120
+fcfa:b4ca:f1d8:125b:dc00::1b00/120
+fcfa:b4ca:f1d8:125b:dc00::1c00/120
+fcfa:b4ca:f1d8:125b:dc00::1d00/120
+fcfa:b4ca:f1d8:125b:dc00::1e00/120
+fcfa:b4ca:f1d8:125b:dc00::1f00/120
+fcfa:b4ca:f1d8:125b:dc00::2000/120
+fcfa:b4ca:f1d8:125b:dc00::2100/120
+fcfa:b4ca:f1d8:125b:dc00::2200/120
+fcfa:b4ca:f1d8:125b:dc00::2300/120
+fcfa:b4ca:f1d8:125b:dc00::2400/120
+fcfa:b4ca:f1d8:125b:dc00::2500/120
+fcfa:b4ca:f1d8:125b:dc00::2600/120
+fcfa:b4ca:f1d8:125b:dc00::2700/120
+fcfa:b4ca:f1d8:125b:dc00::2800/120
+fcfa:b4ca:f1d8:125b:dc00::2900/120
+fcfa:b4ca:f1d8:125b:dc00::2a00/120
+fcfa:b4ca:f1d8:125b:dc00::2b00/120
+fcfa:b4ca:f1d8:125b:dc00::2c00/120
+fcfa:b4ca:f1d8:125b:dc00::2d00/120
+fcfa:b4ca:f1d8:125b:dc00::2e00/120
+fcfa:b4ca:f1d8:125b:dc00::2f00/120
+fcfa:b4ca:f1d8:125b:dc00::3000/120
+fcfa:b4ca:f1d8:125b:dc00::3100/120
+fcfa:b4ca:f1d8:125b:dc00::3200/120
+fcfa:b4ca:f1d8:125b:dc00::3300/120
+fcfa:b4ca:f1d8:125b:dc00::3400/120
+fcfa:b4ca:f1d8:125b:dc00::3500/120
+fcfa:b4ca:f1d8:125b:dc00::3600/120
+fcfa:b4ca:f1d8:125b:dc00::3700/120
+fcfa:b4ca:f1d8:125b:dc00::3800/120
+fcfa:b4ca:f1d8:125b:dc00::3900/120
+fcfa:b4ca:f1d8:125b:dc00::3a00/120
+fcfa:b4ca:f1d8:125b:dc00::3b00/120
+fcfa:b4ca:f1d8:125b:dc00::3c00/120
+fcfa:b4ca:f1d8:125b:dc00::3d00/120
+fcfa:b4ca:f1d8:125b:dc00::3e00/120
+fcfa:b4ca:f1d8:125b:dc00::3f00/120
+fcfa:b4ca:f1d8:125b:dc00::4000/120
+fcfa:b4ca:f1d8:125b:dc00::4100/120
+fcfa:b4ca:f1d8:125b:dc00::4200/120
+fcfa:b4ca:f1d8:125b:dc00::4300/120
+fcfa:b4ca:f1d8:125b:dc00::4400/120
+fcfa:b4ca:f1d8:125b:dc00::4500/120
+fcfa:b4ca:f1d8:125b:dc00::4600/120
+fcfa:b4ca:f1d8:125b:dc00::4700/120
+fcfa:b4ca:f1d8:125b:dc00::4800/120
+fcfa:b4ca:f1d8:125b:dc00::4900/120
+fcfa:b4ca:f1d8:125b:dc00::4a00/120
+fcfa:b4ca:f1d8:125b:dc00::4b00/120
+fcfa:b4ca:f1d8:125b:dc00::4c00/120
+fcfa:b4ca:f1d8:125b:dc00::4d00/120
+fcfa:b4ca:f1d8:125b:dc00::4e00/120
+fcfa:b4ca:f1d8:125b:dc00::4f00/120
+fcfa:b4ca:f1d8:125b:dc00::5000/120
+fcfa:b4ca:f1d8:125b:dc00::5100/120
+fcfa:b4ca:f1d8:125b:dc00::5200/120
+fcfa:b4ca:f1d8:125b:dc00::5300/120
+fcfa:b4ca:f1d8:125b:dc00::5400/120
+fcfa:b4ca:f1d8:125b:dc00::5500/120
+fcfa:b4ca:f1d8:125b:dc00::5600/120
+fcfa:b4ca:f1d8:125b:dc00::5700/120
+fcfa:b4ca:f1d8:125b:dc00::5800/120
+fcfa:b4ca:f1d8:125b:dc00::5900/120
+fcfa:b4ca:f1d8:125b:dc00::5a00/120
+fcfa:b4ca:f1d8:125b:dc00::5b00/120
+fcfa:b4ca:f1d8:125b:dc00::5c00/120
+fcfa:b4ca:f1d8:125b:dc00::5d00/120
+fcfa:b4ca:f1d8:125b:dc00::5e00/120
+fcfa:b4ca:f1d8:125b:dc00::5f00/120
+fcfa:b4ca:f1d8:125b:dc00::6000/120
+fcfa:b4ca:f1d8:125b:dc00::6100/120
+fcfa:b4ca:f1d8:125b:dc00::6200/120
+fcfa:b4ca:f1d8:125b:dc00::6300/120
+fcfa:b4ca:f1d8:125b:dc00::6400/120
+fcfa:b4ca:f1d8:125b:dc00::6500/120
+fcfa:b4ca:f1d8:125b:dc00::6600/120
+fcfa:b4ca:f1d8:125b:dc00::6700/120
+fcfa:b4ca:f1d8:125b:dc00::6800/120
+fcfa:b4ca:f1d8:125b:dc00::6900/120
+fcfa:b4ca:f1d8:125b:dc00::6a00/120
+fcfa:b4ca:f1d8:125b:dc00::6b00/120
+fcfa:b4ca:f1d8:125b:dc00::6c00/120
+fcfa:b4ca:f1d8:125b:dc00::6d00/120
+fcfa:b4ca:f1d8:125b:dc00::6e00/120
+fcfa:b4ca:f1d8:125b:dc00::6f00/120
+fcfa:b4ca:f1d8:125b:dc00::7000/120
+fcfa:b4ca:f1d8:125b:dc00::7100/120
+fcfa:b4ca:f1d8:125b:dc00::7200/120
+fcfa:b4ca:f1d8:125b:dc00::7300/120
+fcfa:b4ca:f1d8:125b:dc00::7400/120
+fcfa:b4ca:f1d8:125b:dc00::7500/120
+fcfa:b4ca:f1d8:125b:dc00::7600/120
+fcfa:b4ca:f1d8:125b:dc00::7700/120
+fcfa:b4ca:f1d8:125b:dc00::7800/120
+fcfa:b4ca:f1d8:125b:dc00::7900/120
+fcfa:b4ca:f1d8:125b:dc00::7a00/120
+fcfa:b4ca:f1d8:125b:dc00::7b00/120
+fcfa:b4ca:f1d8:125b:dc00::7c00/120
+fcfa:b4ca:f1d8:125b:dc00::7d00/120
+fcfa:b4ca:f1d8:125b:dc00::7e00/120
+fcfa:b4ca:f1d8:125b:dc00::7f00/120
+fcfa:b4ca:f1d8:125b:dc00::8000/120
+fcfa:b4ca:f1d8:125b:dc00::8100/120
+fcfa:b4ca:f1d8:125b:dc00::8200/120
+fcfa:b4ca:f1d8:125b:dc00::8300/120
+fcfa:b4ca:f1d8:125b:dc00::8400/120
+fcfa:b4ca:f1d8:125b:dc00::8500/120
+fcfa:b4ca:f1d8:125b:dc00::8600/120
+fcfa:b4ca:f1d8:125b:dc00::8700/120
+fcfa:b4ca:f1d8:125b:dc00::8800/120
+fcfa:b4ca:f1d8:125b:dc00::8900/120
+fcfa:b4ca:f1d8:125b:dc00::8a00/120
+fcfa:b4ca:f1d8:125b:dc00::8b00/120
+fcfa:b4ca:f1d8:125b:dc00::8c00/120
+fcfa:b4ca:f1d8:125b:dc00::8d00/120
+fcfa:b4ca:f1d8:125b:dc00::8e00/120
+fcfa:b4ca:f1d8:125b:dc00::8f00/120
+fcfa:b4ca:f1d8:125b:dc00::9000/120
+fcfa:b4ca:f1d8:125b:dc00::9100/120
+fcfa:b4ca:f1d8:125b:dc00::9200/120
+fcfa:b4ca:f1d8:125b:dc00::9300/120
+fcfa:b4ca:f1d8:125b:dc00::9400/120
+fcfa:b4ca:f1d8:125b:dc00::9500/120
+fcfa:b4ca:f1d8:125b:dc00::9600/120
+fcfa:b4ca:f1d8:125b:dc00::9700/120
+fcfa:b4ca:f1d8:125b:dc00::9800/120
+fcfa:b4ca:f1d8:125b:dc00::9900/120
+fcfa:b4ca:f1d8:125b:dc00::9a00/120
+fcfa:b4ca:f1d8:125b:dc00::9b00/120
+fcfa:b4ca:f1d8:125b:dc00::9c00/120
+fcfa:b4ca:f1d8:125b:dc00::9d00/120
+fcfa:b4ca:f1d8:125b:dc00::9e00/120
+fcfa:b4ca:f1d8:125b:dc00::9f00/120
+fcfa:b4ca:f1d8:125b:dc00::a000/120
+fcfa:b4ca:f1d8:125b:dc00::a100/120
+fcfa:b4ca:f1d8:125b:dc00::a200/120
+fcfa:b4ca:f1d8:125b:dc00::a300/120
+fcfa:b4ca:f1d8:125b:dc00::a400/120
+fcfa:b4ca:f1d8:125b:dc00::a500/120
+fcfa:b4ca:f1d8:125b:dc00::a600/120
+fcfa:b4ca:f1d8:125b:dc00::a700/120
+fcfa:b4ca:f1d8:125b:dc00::a800/120
+fcfa:b4ca:f1d8:125b:dc00::a900/120
+fcfa:b4ca:f1d8:125b:dc00::aa00/120
+fcfa:b4ca:f1d8:125b:dc00::ab00/120
+fcfa:b4ca:f1d8:125b:dc00::ac00/120
+fcfa:b4ca:f1d8:125b:dc00::ad00/120
+fcfa:b4ca:f1d8:125b:dc00::ae00/120
+fcfa:b4ca:f1d8:125b:dc00::af00/120
+fcfa:b4ca:f1d8:125b:dc00::b000/120
+fcfa:b4ca:f1d8:125b:dc00::b100/120
+fcfa:b4ca:f1d8:125b:dc00::b200/120
+fcfa:b4ca:f1d8:125b:dc00::b300/120
+fcfa:b4ca:f1d8:125b:dc00::b400/120
+fcfa:b4ca:f1d8:125b:dc00::b500/120
+fcfa:b4ca:f1d8:125b:dc00::b600/120
+fcfa:b4ca:f1d8:125b:dc00::b700/120
+fcfa:b4ca:f1d8:125b:dc00::b800/120
+fcfa:b4ca:f1d8:125b:dc00::b900/120
+fcfa:b4ca:f1d8:125b:dc00::ba00/120
+fcfa:b4ca:f1d8:125b:dc00::bb00/120
+fcfa:b4ca:f1d8:125b:dc00::bc00/120
+fcfa:b4ca:f1d8:125b:dc00::bd00/120
+fcfa:b4ca:f1d8:125b:dc00::be00/120
+fcfa:b4ca:f1d8:125b:dc00::bf00/120
+fcfa:b4ca:f1d8:125b:dc00::c000/120
+fcfa:b4ca:f1d8:125b:dc00::c100/120
+fcfa:b4ca:f1d8:125b:dc00::c200/120
+fcfa:b4ca:f1d8:125b:dc00::c300/120
+fcfa:b4ca:f1d8:125b:dc00::c400/120
+fcfa:b4ca:f1d8:125b:dc00::c500/120
+fcfa:b4ca:f1d8:125b:dc00::c600/120
+fcfa:b4ca:f1d8:125b:dc00::c700/120
+fcfa:b4ca:f1d8:125b:dc00::c800/120
+fcfa:b4ca:f1d8:125b:dc00::c900/120
+fcfa:b4ca:f1d8:125b:dc00::ca00/120
+fcfa:b4ca:f1d8:125b:dc00::cb00/120
+fcfa:b4ca:f1d8:125b:dc00::cc00/120
+fcfa:b4ca:f1d8:125b:dc00::cd00/120
+fcfa:b4ca:f1d8:125b:dc00::ce00/120
+fcfa:b4ca:f1d8:125b:dc00::cf00/120
+fcfa:b4ca:f1d8:125b:dc00::d000/120
+fcfa:b4ca:f1d8:125b:dc00::d100/120
+fcfa:b4ca:f1d8:125b:dc00::d200/120
+fcfa:b4ca:f1d8:125b:dc00::d300/120
+fcfa:b4ca:f1d8:125b:dc00::d400/120
+fcfa:b4ca:f1d8:125b:dc00::d500/120
+fcfa:b4ca:f1d8:125b:dc00::d600/120
+fcfa:b4ca:f1d8:125b:dc00::d700/120
+fcfa:b4ca:f1d8:125b:dc00::d800/120
+fcfa:b4ca:f1d8:125b:dc00::d900/120
+fcfa:b4ca:f1d8:125b:dc00::da00/120
+fcfa:b4ca:f1d8:125b:dc00::db00/120
+fcfa:b4ca:f1d8:125b:dc00::dc00/120
+fcfa:b4ca:f1d8:125b:dc00::dd00/120
+fcfa:b4ca:f1d8:125b:dc00::de00/120
+fcfa:b4ca:f1d8:125b:dc00::df00/120
+fcfa:b4ca:f1d8:125b:dc00::e000/120
+fcfa:b4ca:f1d8:125b:dc00::e100/120
+fcfa:b4ca:f1d8:125b:dc00::e200/120
+fcfa:b4ca:f1d8:125b:dc00::e300/120
+fcfa:b4ca:f1d8:125b:dc00::e400/120
+fcfa:b4ca:f1d8:125b:dc00::e500/120
+fcfa:b4ca:f1d8:125b:dc00::e600/120
+fcfa:b4ca:f1d8:125b:dc00::e700/120
+fcfa:b4ca:f1d8:125b:dc00::e800/120
+fcfa:b4ca:f1d8:125b:dc00::e900/120
+fcfa:b4ca:f1d8:125b:dc00::ea00/120
+fcfa:b4ca:f1d8:125b:dc00::eb00/120
+fcfa:b4ca:f1d8:125b:dc00::ec00/120
+fcfa:b4ca:f1d8:125b:dc00::ed00/120
+fcfa:b4ca:f1d8:125b:dc00::ee00/120
+fcfa:b4ca:f1d8:125b:dc00::ef00/120
+fcfa:b4ca:f1d8:125b:dc00::f000/120
+fcfa:b4ca:f1d8:125b:dc00::f100/120
+fcfa:b4ca:f1d8:125b:dc00::f200/120
+fcfa:b4ca:f1d8:125b:dc00::f300/120
+fcfa:b4ca:f1d8:125b:dc00::f400/120
+fcfa:b4ca:f1d8:125b:dc00::f500/120
+fcfa:b4ca:f1d8:125b:dc00::f600/120
+fcfa:b4ca:f1d8:125b:dc00::f700/120
+fcfa:b4ca:f1d8:125b:dc00::f800/120
+fcfa:b4ca:f1d8:125b:dc00::f900/120
+fcfa:b4ca:f1d8:125b:dc00::fa00/120
+fcfa:b4ca:f1d8:125b:dc00::fb00/120
+fcfa:b4ca:f1d8:125b:dc00::fc00/120
+fcfa:b4ca:f1d8:125b:dc00::fd00/120
+fcfa:b4ca:f1d8:125b:dc00::fe00/120
+fcfa:b4ca:f1d8:125b:dc00::ff00/120
diff --git a/tests/nsplit-fcfa:b4ca:f1d8:125b:dc00::-127-128 b/tests/nsplit-fcfa:b4ca:f1d8:125b:dc00::-127-128
new file mode 100644
index 0000000..9c10236
--- /dev/null
+++ b/tests/nsplit-fcfa:b4ca:f1d8:125b:dc00::-127-128
@@ -0,0 +1,2 @@
+fcfa:b4ca:f1d8:125b:dc00::/128
+fcfa:b4ca:f1d8:125b:dc00::1/128
diff --git a/tests/run-coverage.sh b/tests/run-coverage.sh
new file mode 100755
index 0000000..145eb12
--- /dev/null
+++ b/tests/run-coverage.sh
@@ -0,0 +1,4 @@
+#! /bin/sh
+
+cat public/index.html|grep headerCovTableEntry|grep "%"|head -1|sed 's/^.*>\([0-9\.\ %]*\)<.*$/coverage lines: \1/'
+
diff --git a/tests/split-10.10.10.0-16-18 b/tests/split-10.10.10.0-16-18
new file mode 100644
index 0000000..ec76506
--- /dev/null
+++ b/tests/split-10.10.10.0-16-18
@@ -0,0 +1,8 @@
+[Split networks]
+Network: 10.10.0.0/18
+Network: 10.10.64.0/18
+Network: 10.10.128.0/18
+Network: 10.10.192.0/18
+
+Total: 4
+Hosts/Net: 16382
diff --git a/tests/split-10.10.10.0-16-24 b/tests/split-10.10.10.0-16-24
new file mode 100644
index 0000000..719020f
--- /dev/null
+++ b/tests/split-10.10.10.0-16-24
@@ -0,0 +1,260 @@
+[Split networks]
+Network: 10.10.0.0/24
+Network: 10.10.1.0/24
+Network: 10.10.2.0/24
+Network: 10.10.3.0/24
+Network: 10.10.4.0/24
+Network: 10.10.5.0/24
+Network: 10.10.6.0/24
+Network: 10.10.7.0/24
+Network: 10.10.8.0/24
+Network: 10.10.9.0/24
+Network: 10.10.10.0/24
+Network: 10.10.11.0/24
+Network: 10.10.12.0/24
+Network: 10.10.13.0/24
+Network: 10.10.14.0/24
+Network: 10.10.15.0/24
+Network: 10.10.16.0/24
+Network: 10.10.17.0/24
+Network: 10.10.18.0/24
+Network: 10.10.19.0/24
+Network: 10.10.20.0/24
+Network: 10.10.21.0/24
+Network: 10.10.22.0/24
+Network: 10.10.23.0/24
+Network: 10.10.24.0/24
+Network: 10.10.25.0/24
+Network: 10.10.26.0/24
+Network: 10.10.27.0/24
+Network: 10.10.28.0/24
+Network: 10.10.29.0/24
+Network: 10.10.30.0/24
+Network: 10.10.31.0/24
+Network: 10.10.32.0/24
+Network: 10.10.33.0/24
+Network: 10.10.34.0/24
+Network: 10.10.35.0/24
+Network: 10.10.36.0/24
+Network: 10.10.37.0/24
+Network: 10.10.38.0/24
+Network: 10.10.39.0/24
+Network: 10.10.40.0/24
+Network: 10.10.41.0/24
+Network: 10.10.42.0/24
+Network: 10.10.43.0/24
+Network: 10.10.44.0/24
+Network: 10.10.45.0/24
+Network: 10.10.46.0/24
+Network: 10.10.47.0/24
+Network: 10.10.48.0/24
+Network: 10.10.49.0/24
+Network: 10.10.50.0/24
+Network: 10.10.51.0/24
+Network: 10.10.52.0/24
+Network: 10.10.53.0/24
+Network: 10.10.54.0/24
+Network: 10.10.55.0/24
+Network: 10.10.56.0/24
+Network: 10.10.57.0/24
+Network: 10.10.58.0/24
+Network: 10.10.59.0/24
+Network: 10.10.60.0/24
+Network: 10.10.61.0/24
+Network: 10.10.62.0/24
+Network: 10.10.63.0/24
+Network: 10.10.64.0/24
+Network: 10.10.65.0/24
+Network: 10.10.66.0/24
+Network: 10.10.67.0/24
+Network: 10.10.68.0/24
+Network: 10.10.69.0/24
+Network: 10.10.70.0/24
+Network: 10.10.71.0/24
+Network: 10.10.72.0/24
+Network: 10.10.73.0/24
+Network: 10.10.74.0/24
+Network: 10.10.75.0/24
+Network: 10.10.76.0/24
+Network: 10.10.77.0/24
+Network: 10.10.78.0/24
+Network: 10.10.79.0/24
+Network: 10.10.80.0/24
+Network: 10.10.81.0/24
+Network: 10.10.82.0/24
+Network: 10.10.83.0/24
+Network: 10.10.84.0/24
+Network: 10.10.85.0/24
+Network: 10.10.86.0/24
+Network: 10.10.87.0/24
+Network: 10.10.88.0/24
+Network: 10.10.89.0/24
+Network: 10.10.90.0/24
+Network: 10.10.91.0/24
+Network: 10.10.92.0/24
+Network: 10.10.93.0/24
+Network: 10.10.94.0/24
+Network: 10.10.95.0/24
+Network: 10.10.96.0/24
+Network: 10.10.97.0/24
+Network: 10.10.98.0/24
+Network: 10.10.99.0/24
+Network: 10.10.100.0/24
+Network: 10.10.101.0/24
+Network: 10.10.102.0/24
+Network: 10.10.103.0/24
+Network: 10.10.104.0/24
+Network: 10.10.105.0/24
+Network: 10.10.106.0/24
+Network: 10.10.107.0/24
+Network: 10.10.108.0/24
+Network: 10.10.109.0/24
+Network: 10.10.110.0/24
+Network: 10.10.111.0/24
+Network: 10.10.112.0/24
+Network: 10.10.113.0/24
+Network: 10.10.114.0/24
+Network: 10.10.115.0/24
+Network: 10.10.116.0/24
+Network: 10.10.117.0/24
+Network: 10.10.118.0/24
+Network: 10.10.119.0/24
+Network: 10.10.120.0/24
+Network: 10.10.121.0/24
+Network: 10.10.122.0/24
+Network: 10.10.123.0/24
+Network: 10.10.124.0/24
+Network: 10.10.125.0/24
+Network: 10.10.126.0/24
+Network: 10.10.127.0/24
+Network: 10.10.128.0/24
+Network: 10.10.129.0/24
+Network: 10.10.130.0/24
+Network: 10.10.131.0/24
+Network: 10.10.132.0/24
+Network: 10.10.133.0/24
+Network: 10.10.134.0/24
+Network: 10.10.135.0/24
+Network: 10.10.136.0/24
+Network: 10.10.137.0/24
+Network: 10.10.138.0/24
+Network: 10.10.139.0/24
+Network: 10.10.140.0/24
+Network: 10.10.141.0/24
+Network: 10.10.142.0/24
+Network: 10.10.143.0/24
+Network: 10.10.144.0/24
+Network: 10.10.145.0/24
+Network: 10.10.146.0/24
+Network: 10.10.147.0/24
+Network: 10.10.148.0/24
+Network: 10.10.149.0/24
+Network: 10.10.150.0/24
+Network: 10.10.151.0/24
+Network: 10.10.152.0/24
+Network: 10.10.153.0/24
+Network: 10.10.154.0/24
+Network: 10.10.155.0/24
+Network: 10.10.156.0/24
+Network: 10.10.157.0/24
+Network: 10.10.158.0/24
+Network: 10.10.159.0/24
+Network: 10.10.160.0/24
+Network: 10.10.161.0/24
+Network: 10.10.162.0/24
+Network: 10.10.163.0/24
+Network: 10.10.164.0/24
+Network: 10.10.165.0/24
+Network: 10.10.166.0/24
+Network: 10.10.167.0/24
+Network: 10.10.168.0/24
+Network: 10.10.169.0/24
+Network: 10.10.170.0/24
+Network: 10.10.171.0/24
+Network: 10.10.172.0/24
+Network: 10.10.173.0/24
+Network: 10.10.174.0/24
+Network: 10.10.175.0/24
+Network: 10.10.176.0/24
+Network: 10.10.177.0/24
+Network: 10.10.178.0/24
+Network: 10.10.179.0/24
+Network: 10.10.180.0/24
+Network: 10.10.181.0/24
+Network: 10.10.182.0/24
+Network: 10.10.183.0/24
+Network: 10.10.184.0/24
+Network: 10.10.185.0/24
+Network: 10.10.186.0/24
+Network: 10.10.187.0/24
+Network: 10.10.188.0/24
+Network: 10.10.189.0/24
+Network: 10.10.190.0/24
+Network: 10.10.191.0/24
+Network: 10.10.192.0/24
+Network: 10.10.193.0/24
+Network: 10.10.194.0/24
+Network: 10.10.195.0/24
+Network: 10.10.196.0/24
+Network: 10.10.197.0/24
+Network: 10.10.198.0/24
+Network: 10.10.199.0/24
+Network: 10.10.200.0/24
+Network: 10.10.201.0/24
+Network: 10.10.202.0/24
+Network: 10.10.203.0/24
+Network: 10.10.204.0/24
+Network: 10.10.205.0/24
+Network: 10.10.206.0/24
+Network: 10.10.207.0/24
+Network: 10.10.208.0/24
+Network: 10.10.209.0/24
+Network: 10.10.210.0/24
+Network: 10.10.211.0/24
+Network: 10.10.212.0/24
+Network: 10.10.213.0/24
+Network: 10.10.214.0/24
+Network: 10.10.215.0/24
+Network: 10.10.216.0/24
+Network: 10.10.217.0/24
+Network: 10.10.218.0/24
+Network: 10.10.219.0/24
+Network: 10.10.220.0/24
+Network: 10.10.221.0/24
+Network: 10.10.222.0/24
+Network: 10.10.223.0/24
+Network: 10.10.224.0/24
+Network: 10.10.225.0/24
+Network: 10.10.226.0/24
+Network: 10.10.227.0/24
+Network: 10.10.228.0/24
+Network: 10.10.229.0/24
+Network: 10.10.230.0/24
+Network: 10.10.231.0/24
+Network: 10.10.232.0/24
+Network: 10.10.233.0/24
+Network: 10.10.234.0/24
+Network: 10.10.235.0/24
+Network: 10.10.236.0/24
+Network: 10.10.237.0/24
+Network: 10.10.238.0/24
+Network: 10.10.239.0/24
+Network: 10.10.240.0/24
+Network: 10.10.241.0/24
+Network: 10.10.242.0/24
+Network: 10.10.243.0/24
+Network: 10.10.244.0/24
+Network: 10.10.245.0/24
+Network: 10.10.246.0/24
+Network: 10.10.247.0/24
+Network: 10.10.248.0/24
+Network: 10.10.249.0/24
+Network: 10.10.250.0/24
+Network: 10.10.251.0/24
+Network: 10.10.252.0/24
+Network: 10.10.253.0/24
+Network: 10.10.254.0/24
+Network: 10.10.255.0/24
+
+Total: 256
+Hosts/Net: 254
diff --git a/tests/split-192.168.5.0-24-29 b/tests/split-192.168.5.0-24-29
new file mode 100644
index 0000000..ca06f8e
--- /dev/null
+++ b/tests/split-192.168.5.0-24-29
@@ -0,0 +1,36 @@
+[Split networks]
+Network: 192.168.5.0/29
+Network: 192.168.5.8/29
+Network: 192.168.5.16/29
+Network: 192.168.5.24/29
+Network: 192.168.5.32/29
+Network: 192.168.5.40/29
+Network: 192.168.5.48/29
+Network: 192.168.5.56/29
+Network: 192.168.5.64/29
+Network: 192.168.5.72/29
+Network: 192.168.5.80/29
+Network: 192.168.5.88/29
+Network: 192.168.5.96/29
+Network: 192.168.5.104/29
+Network: 192.168.5.112/29
+Network: 192.168.5.120/29
+Network: 192.168.5.128/29
+Network: 192.168.5.136/29
+Network: 192.168.5.144/29
+Network: 192.168.5.152/29
+Network: 192.168.5.160/29
+Network: 192.168.5.168/29
+Network: 192.168.5.176/29
+Network: 192.168.5.184/29
+Network: 192.168.5.192/29
+Network: 192.168.5.200/29
+Network: 192.168.5.208/29
+Network: 192.168.5.216/29
+Network: 192.168.5.224/29
+Network: 192.168.5.232/29
+Network: 192.168.5.240/29
+Network: 192.168.5.248/29
+
+Total: 32
+Hosts/Net: 6
diff --git a/tests/split-192.168.5.0-24-31 b/tests/split-192.168.5.0-24-31
new file mode 100644
index 0000000..fd2dd8a
--- /dev/null
+++ b/tests/split-192.168.5.0-24-31
@@ -0,0 +1,132 @@
+[Split networks]
+Network: 192.168.5.0/31
+Network: 192.168.5.2/31
+Network: 192.168.5.4/31
+Network: 192.168.5.6/31
+Network: 192.168.5.8/31
+Network: 192.168.5.10/31
+Network: 192.168.5.12/31
+Network: 192.168.5.14/31
+Network: 192.168.5.16/31
+Network: 192.168.5.18/31
+Network: 192.168.5.20/31
+Network: 192.168.5.22/31
+Network: 192.168.5.24/31
+Network: 192.168.5.26/31
+Network: 192.168.5.28/31
+Network: 192.168.5.30/31
+Network: 192.168.5.32/31
+Network: 192.168.5.34/31
+Network: 192.168.5.36/31
+Network: 192.168.5.38/31
+Network: 192.168.5.40/31
+Network: 192.168.5.42/31
+Network: 192.168.5.44/31
+Network: 192.168.5.46/31
+Network: 192.168.5.48/31
+Network: 192.168.5.50/31
+Network: 192.168.5.52/31
+Network: 192.168.5.54/31
+Network: 192.168.5.56/31
+Network: 192.168.5.58/31
+Network: 192.168.5.60/31
+Network: 192.168.5.62/31
+Network: 192.168.5.64/31
+Network: 192.168.5.66/31
+Network: 192.168.5.68/31
+Network: 192.168.5.70/31
+Network: 192.168.5.72/31
+Network: 192.168.5.74/31
+Network: 192.168.5.76/31
+Network: 192.168.5.78/31
+Network: 192.168.5.80/31
+Network: 192.168.5.82/31
+Network: 192.168.5.84/31
+Network: 192.168.5.86/31
+Network: 192.168.5.88/31
+Network: 192.168.5.90/31
+Network: 192.168.5.92/31
+Network: 192.168.5.94/31
+Network: 192.168.5.96/31
+Network: 192.168.5.98/31
+Network: 192.168.5.100/31
+Network: 192.168.5.102/31
+Network: 192.168.5.104/31
+Network: 192.168.5.106/31
+Network: 192.168.5.108/31
+Network: 192.168.5.110/31
+Network: 192.168.5.112/31
+Network: 192.168.5.114/31
+Network: 192.168.5.116/31
+Network: 192.168.5.118/31
+Network: 192.168.5.120/31
+Network: 192.168.5.122/31
+Network: 192.168.5.124/31
+Network: 192.168.5.126/31
+Network: 192.168.5.128/31
+Network: 192.168.5.130/31
+Network: 192.168.5.132/31
+Network: 192.168.5.134/31
+Network: 192.168.5.136/31
+Network: 192.168.5.138/31
+Network: 192.168.5.140/31
+Network: 192.168.5.142/31
+Network: 192.168.5.144/31
+Network: 192.168.5.146/31
+Network: 192.168.5.148/31
+Network: 192.168.5.150/31
+Network: 192.168.5.152/31
+Network: 192.168.5.154/31
+Network: 192.168.5.156/31
+Network: 192.168.5.158/31
+Network: 192.168.5.160/31
+Network: 192.168.5.162/31
+Network: 192.168.5.164/31
+Network: 192.168.5.166/31
+Network: 192.168.5.168/31
+Network: 192.168.5.170/31
+Network: 192.168.5.172/31
+Network: 192.168.5.174/31
+Network: 192.168.5.176/31
+Network: 192.168.5.178/31
+Network: 192.168.5.180/31
+Network: 192.168.5.182/31
+Network: 192.168.5.184/31
+Network: 192.168.5.186/31
+Network: 192.168.5.188/31
+Network: 192.168.5.190/31
+Network: 192.168.5.192/31
+Network: 192.168.5.194/31
+Network: 192.168.5.196/31
+Network: 192.168.5.198/31
+Network: 192.168.5.200/31
+Network: 192.168.5.202/31
+Network: 192.168.5.204/31
+Network: 192.168.5.206/31
+Network: 192.168.5.208/31
+Network: 192.168.5.210/31
+Network: 192.168.5.212/31
+Network: 192.168.5.214/31
+Network: 192.168.5.216/31
+Network: 192.168.5.218/31
+Network: 192.168.5.220/31
+Network: 192.168.5.222/31
+Network: 192.168.5.224/31
+Network: 192.168.5.226/31
+Network: 192.168.5.228/31
+Network: 192.168.5.230/31
+Network: 192.168.5.232/31
+Network: 192.168.5.234/31
+Network: 192.168.5.236/31
+Network: 192.168.5.238/31
+Network: 192.168.5.240/31
+Network: 192.168.5.242/31
+Network: 192.168.5.244/31
+Network: 192.168.5.246/31
+Network: 192.168.5.248/31
+Network: 192.168.5.250/31
+Network: 192.168.5.252/31
+Network: 192.168.5.254/31
+
+Total: 128
+Hosts/Net: 2
diff --git a/tests/split-192.168.5.0-24-32 b/tests/split-192.168.5.0-24-32
new file mode 100644
index 0000000..caa42eb
--- /dev/null
+++ b/tests/split-192.168.5.0-24-32
@@ -0,0 +1,260 @@
+[Split networks]
+Network: 192.168.5.0/32
+Network: 192.168.5.1/32
+Network: 192.168.5.2/32
+Network: 192.168.5.3/32
+Network: 192.168.5.4/32
+Network: 192.168.5.5/32
+Network: 192.168.5.6/32
+Network: 192.168.5.7/32
+Network: 192.168.5.8/32
+Network: 192.168.5.9/32
+Network: 192.168.5.10/32
+Network: 192.168.5.11/32
+Network: 192.168.5.12/32
+Network: 192.168.5.13/32
+Network: 192.168.5.14/32
+Network: 192.168.5.15/32
+Network: 192.168.5.16/32
+Network: 192.168.5.17/32
+Network: 192.168.5.18/32
+Network: 192.168.5.19/32
+Network: 192.168.5.20/32
+Network: 192.168.5.21/32
+Network: 192.168.5.22/32
+Network: 192.168.5.23/32
+Network: 192.168.5.24/32
+Network: 192.168.5.25/32
+Network: 192.168.5.26/32
+Network: 192.168.5.27/32
+Network: 192.168.5.28/32
+Network: 192.168.5.29/32
+Network: 192.168.5.30/32
+Network: 192.168.5.31/32
+Network: 192.168.5.32/32
+Network: 192.168.5.33/32
+Network: 192.168.5.34/32
+Network: 192.168.5.35/32
+Network: 192.168.5.36/32
+Network: 192.168.5.37/32
+Network: 192.168.5.38/32
+Network: 192.168.5.39/32
+Network: 192.168.5.40/32
+Network: 192.168.5.41/32
+Network: 192.168.5.42/32
+Network: 192.168.5.43/32
+Network: 192.168.5.44/32
+Network: 192.168.5.45/32
+Network: 192.168.5.46/32
+Network: 192.168.5.47/32
+Network: 192.168.5.48/32
+Network: 192.168.5.49/32
+Network: 192.168.5.50/32
+Network: 192.168.5.51/32
+Network: 192.168.5.52/32
+Network: 192.168.5.53/32
+Network: 192.168.5.54/32
+Network: 192.168.5.55/32
+Network: 192.168.5.56/32
+Network: 192.168.5.57/32
+Network: 192.168.5.58/32
+Network: 192.168.5.59/32
+Network: 192.168.5.60/32
+Network: 192.168.5.61/32
+Network: 192.168.5.62/32
+Network: 192.168.5.63/32
+Network: 192.168.5.64/32
+Network: 192.168.5.65/32
+Network: 192.168.5.66/32
+Network: 192.168.5.67/32
+Network: 192.168.5.68/32
+Network: 192.168.5.69/32
+Network: 192.168.5.70/32
+Network: 192.168.5.71/32
+Network: 192.168.5.72/32
+Network: 192.168.5.73/32
+Network: 192.168.5.74/32
+Network: 192.168.5.75/32
+Network: 192.168.5.76/32
+Network: 192.168.5.77/32
+Network: 192.168.5.78/32
+Network: 192.168.5.79/32
+Network: 192.168.5.80/32
+Network: 192.168.5.81/32
+Network: 192.168.5.82/32
+Network: 192.168.5.83/32
+Network: 192.168.5.84/32
+Network: 192.168.5.85/32
+Network: 192.168.5.86/32
+Network: 192.168.5.87/32
+Network: 192.168.5.88/32
+Network: 192.168.5.89/32
+Network: 192.168.5.90/32
+Network: 192.168.5.91/32
+Network: 192.168.5.92/32
+Network: 192.168.5.93/32
+Network: 192.168.5.94/32
+Network: 192.168.5.95/32
+Network: 192.168.5.96/32
+Network: 192.168.5.97/32
+Network: 192.168.5.98/32
+Network: 192.168.5.99/32
+Network: 192.168.5.100/32
+Network: 192.168.5.101/32
+Network: 192.168.5.102/32
+Network: 192.168.5.103/32
+Network: 192.168.5.104/32
+Network: 192.168.5.105/32
+Network: 192.168.5.106/32
+Network: 192.168.5.107/32
+Network: 192.168.5.108/32
+Network: 192.168.5.109/32
+Network: 192.168.5.110/32
+Network: 192.168.5.111/32
+Network: 192.168.5.112/32
+Network: 192.168.5.113/32
+Network: 192.168.5.114/32
+Network: 192.168.5.115/32
+Network: 192.168.5.116/32
+Network: 192.168.5.117/32
+Network: 192.168.5.118/32
+Network: 192.168.5.119/32
+Network: 192.168.5.120/32
+Network: 192.168.5.121/32
+Network: 192.168.5.122/32
+Network: 192.168.5.123/32
+Network: 192.168.5.124/32
+Network: 192.168.5.125/32
+Network: 192.168.5.126/32
+Network: 192.168.5.127/32
+Network: 192.168.5.128/32
+Network: 192.168.5.129/32
+Network: 192.168.5.130/32
+Network: 192.168.5.131/32
+Network: 192.168.5.132/32
+Network: 192.168.5.133/32
+Network: 192.168.5.134/32
+Network: 192.168.5.135/32
+Network: 192.168.5.136/32
+Network: 192.168.5.137/32
+Network: 192.168.5.138/32
+Network: 192.168.5.139/32
+Network: 192.168.5.140/32
+Network: 192.168.5.141/32
+Network: 192.168.5.142/32
+Network: 192.168.5.143/32
+Network: 192.168.5.144/32
+Network: 192.168.5.145/32
+Network: 192.168.5.146/32
+Network: 192.168.5.147/32
+Network: 192.168.5.148/32
+Network: 192.168.5.149/32
+Network: 192.168.5.150/32
+Network: 192.168.5.151/32
+Network: 192.168.5.152/32
+Network: 192.168.5.153/32
+Network: 192.168.5.154/32
+Network: 192.168.5.155/32
+Network: 192.168.5.156/32
+Network: 192.168.5.157/32
+Network: 192.168.5.158/32
+Network: 192.168.5.159/32
+Network: 192.168.5.160/32
+Network: 192.168.5.161/32
+Network: 192.168.5.162/32
+Network: 192.168.5.163/32
+Network: 192.168.5.164/32
+Network: 192.168.5.165/32
+Network: 192.168.5.166/32
+Network: 192.168.5.167/32
+Network: 192.168.5.168/32
+Network: 192.168.5.169/32
+Network: 192.168.5.170/32
+Network: 192.168.5.171/32
+Network: 192.168.5.172/32
+Network: 192.168.5.173/32
+Network: 192.168.5.174/32
+Network: 192.168.5.175/32
+Network: 192.168.5.176/32
+Network: 192.168.5.177/32
+Network: 192.168.5.178/32
+Network: 192.168.5.179/32
+Network: 192.168.5.180/32
+Network: 192.168.5.181/32
+Network: 192.168.5.182/32
+Network: 192.168.5.183/32
+Network: 192.168.5.184/32
+Network: 192.168.5.185/32
+Network: 192.168.5.186/32
+Network: 192.168.5.187/32
+Network: 192.168.5.188/32
+Network: 192.168.5.189/32
+Network: 192.168.5.190/32
+Network: 192.168.5.191/32
+Network: 192.168.5.192/32
+Network: 192.168.5.193/32
+Network: 192.168.5.194/32
+Network: 192.168.5.195/32
+Network: 192.168.5.196/32
+Network: 192.168.5.197/32
+Network: 192.168.5.198/32
+Network: 192.168.5.199/32
+Network: 192.168.5.200/32
+Network: 192.168.5.201/32
+Network: 192.168.5.202/32
+Network: 192.168.5.203/32
+Network: 192.168.5.204/32
+Network: 192.168.5.205/32
+Network: 192.168.5.206/32
+Network: 192.168.5.207/32
+Network: 192.168.5.208/32
+Network: 192.168.5.209/32
+Network: 192.168.5.210/32
+Network: 192.168.5.211/32
+Network: 192.168.5.212/32
+Network: 192.168.5.213/32
+Network: 192.168.5.214/32
+Network: 192.168.5.215/32
+Network: 192.168.5.216/32
+Network: 192.168.5.217/32
+Network: 192.168.5.218/32
+Network: 192.168.5.219/32
+Network: 192.168.5.220/32
+Network: 192.168.5.221/32
+Network: 192.168.5.222/32
+Network: 192.168.5.223/32
+Network: 192.168.5.224/32
+Network: 192.168.5.225/32
+Network: 192.168.5.226/32
+Network: 192.168.5.227/32
+Network: 192.168.5.228/32
+Network: 192.168.5.229/32
+Network: 192.168.5.230/32
+Network: 192.168.5.231/32
+Network: 192.168.5.232/32
+Network: 192.168.5.233/32
+Network: 192.168.5.234/32
+Network: 192.168.5.235/32
+Network: 192.168.5.236/32
+Network: 192.168.5.237/32
+Network: 192.168.5.238/32
+Network: 192.168.5.239/32
+Network: 192.168.5.240/32
+Network: 192.168.5.241/32
+Network: 192.168.5.242/32
+Network: 192.168.5.243/32
+Network: 192.168.5.244/32
+Network: 192.168.5.245/32
+Network: 192.168.5.246/32
+Network: 192.168.5.247/32
+Network: 192.168.5.248/32
+Network: 192.168.5.249/32
+Network: 192.168.5.250/32
+Network: 192.168.5.251/32
+Network: 192.168.5.252/32
+Network: 192.168.5.253/32
+Network: 192.168.5.254/32
+Network: 192.168.5.255/32
+
+Total: 256
+Hosts/Net: 1
diff --git a/tests/split-192.168.5.0-31-32 b/tests/split-192.168.5.0-31-32
new file mode 100644
index 0000000..6841471
--- /dev/null
+++ b/tests/split-192.168.5.0-31-32
@@ -0,0 +1,6 @@
+[Split networks]
+Network: 192.168.5.0/32
+Network: 192.168.5.1/32
+
+Total: 2
+Hosts/Net: 1
diff --git a/tests/split-192.168.5.45-24-26 b/tests/split-192.168.5.45-24-26
new file mode 100644
index 0000000..dc34128
--- /dev/null
+++ b/tests/split-192.168.5.45-24-26
@@ -0,0 +1,8 @@
+[Split networks]
+Network: 192.168.5.0/26
+Network: 192.168.5.64/26
+Network: 192.168.5.128/26
+Network: 192.168.5.192/26
+
+Total: 4
+Hosts/Net: 62
diff --git a/tests/split-2a03:2880:20:4f06:face::-56-64 b/tests/split-2a03:2880:20:4f06:face::-56-64
new file mode 100644
index 0000000..4621336
--- /dev/null
+++ b/tests/split-2a03:2880:20:4f06:face::-56-64
@@ -0,0 +1,260 @@
+[Split networks]
+Network: 2a03:2880:20:4f00::/64
+Network: 2a03:2880:20:4f01::/64
+Network: 2a03:2880:20:4f02::/64
+Network: 2a03:2880:20:4f03::/64
+Network: 2a03:2880:20:4f04::/64
+Network: 2a03:2880:20:4f05::/64
+Network: 2a03:2880:20:4f06::/64
+Network: 2a03:2880:20:4f07::/64
+Network: 2a03:2880:20:4f08::/64
+Network: 2a03:2880:20:4f09::/64
+Network: 2a03:2880:20:4f0a::/64
+Network: 2a03:2880:20:4f0b::/64
+Network: 2a03:2880:20:4f0c::/64
+Network: 2a03:2880:20:4f0d::/64
+Network: 2a03:2880:20:4f0e::/64
+Network: 2a03:2880:20:4f0f::/64
+Network: 2a03:2880:20:4f10::/64
+Network: 2a03:2880:20:4f11::/64
+Network: 2a03:2880:20:4f12::/64
+Network: 2a03:2880:20:4f13::/64
+Network: 2a03:2880:20:4f14::/64
+Network: 2a03:2880:20:4f15::/64
+Network: 2a03:2880:20:4f16::/64
+Network: 2a03:2880:20:4f17::/64
+Network: 2a03:2880:20:4f18::/64
+Network: 2a03:2880:20:4f19::/64
+Network: 2a03:2880:20:4f1a::/64
+Network: 2a03:2880:20:4f1b::/64
+Network: 2a03:2880:20:4f1c::/64
+Network: 2a03:2880:20:4f1d::/64
+Network: 2a03:2880:20:4f1e::/64
+Network: 2a03:2880:20:4f1f::/64
+Network: 2a03:2880:20:4f20::/64
+Network: 2a03:2880:20:4f21::/64
+Network: 2a03:2880:20:4f22::/64
+Network: 2a03:2880:20:4f23::/64
+Network: 2a03:2880:20:4f24::/64
+Network: 2a03:2880:20:4f25::/64
+Network: 2a03:2880:20:4f26::/64
+Network: 2a03:2880:20:4f27::/64
+Network: 2a03:2880:20:4f28::/64
+Network: 2a03:2880:20:4f29::/64
+Network: 2a03:2880:20:4f2a::/64
+Network: 2a03:2880:20:4f2b::/64
+Network: 2a03:2880:20:4f2c::/64
+Network: 2a03:2880:20:4f2d::/64
+Network: 2a03:2880:20:4f2e::/64
+Network: 2a03:2880:20:4f2f::/64
+Network: 2a03:2880:20:4f30::/64
+Network: 2a03:2880:20:4f31::/64
+Network: 2a03:2880:20:4f32::/64
+Network: 2a03:2880:20:4f33::/64
+Network: 2a03:2880:20:4f34::/64
+Network: 2a03:2880:20:4f35::/64
+Network: 2a03:2880:20:4f36::/64
+Network: 2a03:2880:20:4f37::/64
+Network: 2a03:2880:20:4f38::/64
+Network: 2a03:2880:20:4f39::/64
+Network: 2a03:2880:20:4f3a::/64
+Network: 2a03:2880:20:4f3b::/64
+Network: 2a03:2880:20:4f3c::/64
+Network: 2a03:2880:20:4f3d::/64
+Network: 2a03:2880:20:4f3e::/64
+Network: 2a03:2880:20:4f3f::/64
+Network: 2a03:2880:20:4f40::/64
+Network: 2a03:2880:20:4f41::/64
+Network: 2a03:2880:20:4f42::/64
+Network: 2a03:2880:20:4f43::/64
+Network: 2a03:2880:20:4f44::/64
+Network: 2a03:2880:20:4f45::/64
+Network: 2a03:2880:20:4f46::/64
+Network: 2a03:2880:20:4f47::/64
+Network: 2a03:2880:20:4f48::/64
+Network: 2a03:2880:20:4f49::/64
+Network: 2a03:2880:20:4f4a::/64
+Network: 2a03:2880:20:4f4b::/64
+Network: 2a03:2880:20:4f4c::/64
+Network: 2a03:2880:20:4f4d::/64
+Network: 2a03:2880:20:4f4e::/64
+Network: 2a03:2880:20:4f4f::/64
+Network: 2a03:2880:20:4f50::/64
+Network: 2a03:2880:20:4f51::/64
+Network: 2a03:2880:20:4f52::/64
+Network: 2a03:2880:20:4f53::/64
+Network: 2a03:2880:20:4f54::/64
+Network: 2a03:2880:20:4f55::/64
+Network: 2a03:2880:20:4f56::/64
+Network: 2a03:2880:20:4f57::/64
+Network: 2a03:2880:20:4f58::/64
+Network: 2a03:2880:20:4f59::/64
+Network: 2a03:2880:20:4f5a::/64
+Network: 2a03:2880:20:4f5b::/64
+Network: 2a03:2880:20:4f5c::/64
+Network: 2a03:2880:20:4f5d::/64
+Network: 2a03:2880:20:4f5e::/64
+Network: 2a03:2880:20:4f5f::/64
+Network: 2a03:2880:20:4f60::/64
+Network: 2a03:2880:20:4f61::/64
+Network: 2a03:2880:20:4f62::/64
+Network: 2a03:2880:20:4f63::/64
+Network: 2a03:2880:20:4f64::/64
+Network: 2a03:2880:20:4f65::/64
+Network: 2a03:2880:20:4f66::/64
+Network: 2a03:2880:20:4f67::/64
+Network: 2a03:2880:20:4f68::/64
+Network: 2a03:2880:20:4f69::/64
+Network: 2a03:2880:20:4f6a::/64
+Network: 2a03:2880:20:4f6b::/64
+Network: 2a03:2880:20:4f6c::/64
+Network: 2a03:2880:20:4f6d::/64
+Network: 2a03:2880:20:4f6e::/64
+Network: 2a03:2880:20:4f6f::/64
+Network: 2a03:2880:20:4f70::/64
+Network: 2a03:2880:20:4f71::/64
+Network: 2a03:2880:20:4f72::/64
+Network: 2a03:2880:20:4f73::/64
+Network: 2a03:2880:20:4f74::/64
+Network: 2a03:2880:20:4f75::/64
+Network: 2a03:2880:20:4f76::/64
+Network: 2a03:2880:20:4f77::/64
+Network: 2a03:2880:20:4f78::/64
+Network: 2a03:2880:20:4f79::/64
+Network: 2a03:2880:20:4f7a::/64
+Network: 2a03:2880:20:4f7b::/64
+Network: 2a03:2880:20:4f7c::/64
+Network: 2a03:2880:20:4f7d::/64
+Network: 2a03:2880:20:4f7e::/64
+Network: 2a03:2880:20:4f7f::/64
+Network: 2a03:2880:20:4f80::/64
+Network: 2a03:2880:20:4f81::/64
+Network: 2a03:2880:20:4f82::/64
+Network: 2a03:2880:20:4f83::/64
+Network: 2a03:2880:20:4f84::/64
+Network: 2a03:2880:20:4f85::/64
+Network: 2a03:2880:20:4f86::/64
+Network: 2a03:2880:20:4f87::/64
+Network: 2a03:2880:20:4f88::/64
+Network: 2a03:2880:20:4f89::/64
+Network: 2a03:2880:20:4f8a::/64
+Network: 2a03:2880:20:4f8b::/64
+Network: 2a03:2880:20:4f8c::/64
+Network: 2a03:2880:20:4f8d::/64
+Network: 2a03:2880:20:4f8e::/64
+Network: 2a03:2880:20:4f8f::/64
+Network: 2a03:2880:20:4f90::/64
+Network: 2a03:2880:20:4f91::/64
+Network: 2a03:2880:20:4f92::/64
+Network: 2a03:2880:20:4f93::/64
+Network: 2a03:2880:20:4f94::/64
+Network: 2a03:2880:20:4f95::/64
+Network: 2a03:2880:20:4f96::/64
+Network: 2a03:2880:20:4f97::/64
+Network: 2a03:2880:20:4f98::/64
+Network: 2a03:2880:20:4f99::/64
+Network: 2a03:2880:20:4f9a::/64
+Network: 2a03:2880:20:4f9b::/64
+Network: 2a03:2880:20:4f9c::/64
+Network: 2a03:2880:20:4f9d::/64
+Network: 2a03:2880:20:4f9e::/64
+Network: 2a03:2880:20:4f9f::/64
+Network: 2a03:2880:20:4fa0::/64
+Network: 2a03:2880:20:4fa1::/64
+Network: 2a03:2880:20:4fa2::/64
+Network: 2a03:2880:20:4fa3::/64
+Network: 2a03:2880:20:4fa4::/64
+Network: 2a03:2880:20:4fa5::/64
+Network: 2a03:2880:20:4fa6::/64
+Network: 2a03:2880:20:4fa7::/64
+Network: 2a03:2880:20:4fa8::/64
+Network: 2a03:2880:20:4fa9::/64
+Network: 2a03:2880:20:4faa::/64
+Network: 2a03:2880:20:4fab::/64
+Network: 2a03:2880:20:4fac::/64
+Network: 2a03:2880:20:4fad::/64
+Network: 2a03:2880:20:4fae::/64
+Network: 2a03:2880:20:4faf::/64
+Network: 2a03:2880:20:4fb0::/64
+Network: 2a03:2880:20:4fb1::/64
+Network: 2a03:2880:20:4fb2::/64
+Network: 2a03:2880:20:4fb3::/64
+Network: 2a03:2880:20:4fb4::/64
+Network: 2a03:2880:20:4fb5::/64
+Network: 2a03:2880:20:4fb6::/64
+Network: 2a03:2880:20:4fb7::/64
+Network: 2a03:2880:20:4fb8::/64
+Network: 2a03:2880:20:4fb9::/64
+Network: 2a03:2880:20:4fba::/64
+Network: 2a03:2880:20:4fbb::/64
+Network: 2a03:2880:20:4fbc::/64
+Network: 2a03:2880:20:4fbd::/64
+Network: 2a03:2880:20:4fbe::/64
+Network: 2a03:2880:20:4fbf::/64
+Network: 2a03:2880:20:4fc0::/64
+Network: 2a03:2880:20:4fc1::/64
+Network: 2a03:2880:20:4fc2::/64
+Network: 2a03:2880:20:4fc3::/64
+Network: 2a03:2880:20:4fc4::/64
+Network: 2a03:2880:20:4fc5::/64
+Network: 2a03:2880:20:4fc6::/64
+Network: 2a03:2880:20:4fc7::/64
+Network: 2a03:2880:20:4fc8::/64
+Network: 2a03:2880:20:4fc9::/64
+Network: 2a03:2880:20:4fca::/64
+Network: 2a03:2880:20:4fcb::/64
+Network: 2a03:2880:20:4fcc::/64
+Network: 2a03:2880:20:4fcd::/64
+Network: 2a03:2880:20:4fce::/64
+Network: 2a03:2880:20:4fcf::/64
+Network: 2a03:2880:20:4fd0::/64
+Network: 2a03:2880:20:4fd1::/64
+Network: 2a03:2880:20:4fd2::/64
+Network: 2a03:2880:20:4fd3::/64
+Network: 2a03:2880:20:4fd4::/64
+Network: 2a03:2880:20:4fd5::/64
+Network: 2a03:2880:20:4fd6::/64
+Network: 2a03:2880:20:4fd7::/64
+Network: 2a03:2880:20:4fd8::/64
+Network: 2a03:2880:20:4fd9::/64
+Network: 2a03:2880:20:4fda::/64
+Network: 2a03:2880:20:4fdb::/64
+Network: 2a03:2880:20:4fdc::/64
+Network: 2a03:2880:20:4fdd::/64
+Network: 2a03:2880:20:4fde::/64
+Network: 2a03:2880:20:4fdf::/64
+Network: 2a03:2880:20:4fe0::/64
+Network: 2a03:2880:20:4fe1::/64
+Network: 2a03:2880:20:4fe2::/64
+Network: 2a03:2880:20:4fe3::/64
+Network: 2a03:2880:20:4fe4::/64
+Network: 2a03:2880:20:4fe5::/64
+Network: 2a03:2880:20:4fe6::/64
+Network: 2a03:2880:20:4fe7::/64
+Network: 2a03:2880:20:4fe8::/64
+Network: 2a03:2880:20:4fe9::/64
+Network: 2a03:2880:20:4fea::/64
+Network: 2a03:2880:20:4feb::/64
+Network: 2a03:2880:20:4fec::/64
+Network: 2a03:2880:20:4fed::/64
+Network: 2a03:2880:20:4fee::/64
+Network: 2a03:2880:20:4fef::/64
+Network: 2a03:2880:20:4ff0::/64
+Network: 2a03:2880:20:4ff1::/64
+Network: 2a03:2880:20:4ff2::/64
+Network: 2a03:2880:20:4ff3::/64
+Network: 2a03:2880:20:4ff4::/64
+Network: 2a03:2880:20:4ff5::/64
+Network: 2a03:2880:20:4ff6::/64
+Network: 2a03:2880:20:4ff7::/64
+Network: 2a03:2880:20:4ff8::/64
+Network: 2a03:2880:20:4ff9::/64
+Network: 2a03:2880:20:4ffa::/64
+Network: 2a03:2880:20:4ffb::/64
+Network: 2a03:2880:20:4ffc::/64
+Network: 2a03:2880:20:4ffd::/64
+Network: 2a03:2880:20:4ffe::/64
+Network: 2a03:2880:20:4fff::/64
+
+Total: 256
+Hosts/Net: 18446744073709551616
diff --git a/tests/split-fcfa:b4ca:f1d8:125b:dc00::-112-120 b/tests/split-fcfa:b4ca:f1d8:125b:dc00::-112-120
new file mode 100644
index 0000000..08b8059
--- /dev/null
+++ b/tests/split-fcfa:b4ca:f1d8:125b:dc00::-112-120
@@ -0,0 +1,260 @@
+[Split networks]
+Network: fcfa:b4ca:f1d8:125b:dc00::/120
+Network: fcfa:b4ca:f1d8:125b:dc00::100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1a00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1b00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1c00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1d00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1e00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::1f00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2a00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2b00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2c00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2d00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2e00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::2f00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3a00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3b00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3c00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3d00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3e00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::3f00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4a00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4b00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4c00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4d00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4e00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::4f00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5a00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5b00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5c00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5d00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5e00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::5f00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6a00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6b00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6c00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6d00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6e00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::6f00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7a00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7b00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7c00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7d00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7e00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::7f00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8a00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8b00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8c00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8d00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8e00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::8f00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9a00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9b00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9c00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9d00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9e00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::9f00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::a900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::aa00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ab00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ac00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ad00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ae00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::af00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::b900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ba00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::bb00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::bc00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::bd00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::be00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::bf00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::c900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ca00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::cb00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::cc00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::cd00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ce00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::cf00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::d900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::da00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::db00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::dc00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::dd00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::de00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::df00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::e900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ea00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::eb00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ec00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ed00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ee00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ef00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f000/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f100/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f200/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f300/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f400/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f500/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f600/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f700/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f800/120
+Network: fcfa:b4ca:f1d8:125b:dc00::f900/120
+Network: fcfa:b4ca:f1d8:125b:dc00::fa00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::fb00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::fc00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::fd00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::fe00/120
+Network: fcfa:b4ca:f1d8:125b:dc00::ff00/120
+
+Total: 256
+Hosts/Net: 256
diff --git a/tests/split-fcfa:b4ca:f1d8:125b:dc00::-127-128 b/tests/split-fcfa:b4ca:f1d8:125b:dc00::-127-128
new file mode 100644
index 0000000..9500596
--- /dev/null
+++ b/tests/split-fcfa:b4ca:f1d8:125b:dc00::-127-128
@@ -0,0 +1,6 @@
+[Split networks]
+Network: fcfa:b4ca:f1d8:125b:dc00::/128
+Network: fcfa:b4ca:f1d8:125b:dc00::1/128
+
+Total: 2
+Hosts/Net: 1
diff --git a/tests/standard-192.168.2.0-24 b/tests/standard-192.168.2.0-24
new file mode 100644
index 0000000..588b5fe
--- /dev/null
+++ b/tests/standard-192.168.2.0-24
@@ -0,0 +1,8 @@
+Network: 192.168.2.0/24
+Netmask: 255.255.255.0 = 24
+Broadcast: 192.168.2.255
+
+Address space: Private Use
+HostMin: 192.168.2.1
+HostMax: 192.168.2.254
+Hosts/Net: 254