{ lib, iterate, ip, }: let inherit (lib) runTests; in runTests { testRangeBasic = { expr = iterate.rangeStr "10.0.0.1" "10.0.0.3"; expected = [ "10.0.0.1" "10.0.0.2" "10.0.0.3" ]; }; testRangeSingle = { expr = iterate.rangeStr "10.0.0.1" "10.0.0.1"; expected = [ "10.0.0.1" ]; }; testRangeEmpty = { expr = iterate.rangeStr "10.0.0.5" "10.0.0.1"; expected = [ ]; }; testRangeCrossOctet = { expr = iterate.rangeStr "10.0.0.254" "10.0.1.2"; expected = [ "10.0.0.254" "10.0.0.255" "10.0.1.0" "10.0.1.1" "10.0.1.2" ]; }; testCidrAddresses30 = { expr = iterate.cidrAddressesStr "10.0.0.0/30"; expected = [ "10.0.0.0" "10.0.0.1" "10.0.0.2" "10.0.0.3" ]; }; testCidrAddresses32 = { expr = iterate.cidrAddressesStr "10.0.0.1/32"; expected = [ "10.0.0.1" ]; }; testCidrAddressesCount = { expr = builtins.length (iterate.cidrAddresses "10.0.0.0/28"); expected = 16; }; testCidrHosts30 = { expr = iterate.cidrHostsStr "10.0.0.0/30"; expected = [ "10.0.0.1" "10.0.0.2" ]; }; testCidrHosts31 = { expr = iterate.cidrHostsStr "10.0.0.0/31"; expected = [ "10.0.0.0" "10.0.0.1" ]; }; testCidrHosts32 = { expr = iterate.cidrHostsStr "10.0.0.1/32"; expected = [ "10.0.0.1" ]; }; testCidrHostsCount = { expr = builtins.length (iterate.cidrHosts "10.0.0.0/28"); expected = 14; }; testInRangeTrue = { expr = iterate.inRange "10.0.0.1" "10.0.0.5" "10.0.0.3"; expected = true; }; testInRangeStart = { expr = iterate.inRange "10.0.0.1" "10.0.0.5" "10.0.0.1"; expected = true; }; testInRangeEnd = { expr = iterate.inRange "10.0.0.1" "10.0.0.5" "10.0.0.5"; expected = true; }; testInRangeFalseLow = { expr = iterate.inRange "10.0.0.2" "10.0.0.5" "10.0.0.1"; expected = false; }; testInRangeFalseHigh = { expr = iterate.inRange "10.0.0.1" "10.0.0.5" "10.0.0.6"; expected = false; }; testCountRangeBasic = { expr = iterate.countRange "10.0.0.1" "10.0.0.10"; expected = 10; }; testCountRangeSingle = { expr = iterate.countRange "10.0.0.1" "10.0.0.1"; expected = 1; }; testCountRangeEmpty = { expr = iterate.countRange "10.0.0.5" "10.0.0.1"; expected = 0; }; testMapRangeFormat = { expr = iterate.mapRange ip.format "10.0.0.1" "10.0.0.3"; expected = [ "10.0.0.1" "10.0.0.2" "10.0.0.3" ]; }; testMapRangeOctets = { expr = iterate.mapRange ip.toOctets "10.0.0.1" "10.0.0.2"; expected = [ [ 10 0 0 1 ] [ 10 0 0 2 ] ]; }; testFilterRangeEven = { expr = builtins.map ip.format (iterate.filterRange (i: lib.mod i 2 == 0) "10.0.0.1" "10.0.0.5"); expected = [ "10.0.0.2" "10.0.0.4" ]; }; testTakeRangeBasic = { expr = iterate.takeRangeStr 3 "10.0.0.1" "10.0.0.10"; expected = [ "10.0.0.1" "10.0.0.2" "10.0.0.3" ]; }; testTakeRangeMoreThanAvailable = { expr = iterate.takeRangeStr 10 "10.0.0.1" "10.0.0.3"; expected = [ "10.0.0.1" "10.0.0.2" "10.0.0.3" ]; }; testTakeRangeZero = { expr = iterate.takeRangeStr 0 "10.0.0.1" "10.0.0.10"; expected = [ ]; }; testFindInRangeBasic = { expr = iterate.findInRangeStr (i: lib.mod i 5 == 0) "10.0.0.1" "10.0.0.10"; expected = "10.0.0.5"; }; testFindInRangeNotFound = { expr = iterate.findInRange (i: i > 1000000000) "10.0.0.1" "10.0.0.10"; expected = null; }; }