{ lib, cidr, }: let inherit (lib) runTests; in runTests { testParseBasic = { expr = cidr.parse "192.168.1.0/24"; expected = { address = 3232235776; prefixLen = 24; }; }; testParseSlash32 = { expr = cidr.parse "10.0.0.1/32"; expected = { address = 167772161; prefixLen = 32; }; }; testParseSlash0 = { expr = cidr.parse "0.0.0.0/0"; expected = { address = 0; prefixLen = 0; }; }; testMakeBasic = { expr = cidr.make "192.168.1.0" 24; expected = { address = 3232235776; prefixLen = 24; }; }; testFormatBasic = { expr = cidr.format { address = 3232235776; prefixLen = 24; }; expected = "192.168.1.0/24"; }; testNetmask24 = { expr = cidr.netmaskStr 24; expected = "255.255.255.0"; }; testNetmask16 = { expr = cidr.netmaskStr 16; expected = "255.255.0.0"; }; testNetmask8 = { expr = cidr.netmaskStr 8; expected = "255.0.0.0"; }; testNetmask32 = { expr = cidr.netmaskStr 32; expected = "255.255.255.255"; }; testNetmask0 = { expr = cidr.netmaskStr 0; expected = "0.0.0.0"; }; testNetmask25 = { expr = cidr.netmaskStr 25; expected = "255.255.255.128"; }; testWildcard24 = { expr = cidr.wildcardStr 24; expected = "0.0.0.255"; }; testWildcard16 = { expr = cidr.wildcardStr 16; expected = "0.0.255.255"; }; testNetworkBasic = { expr = cidr.networkStr "192.168.1.50/24"; expected = "192.168.1.0"; }; testNetworkAlreadyNetwork = { expr = cidr.networkStr "192.168.1.0/24"; expected = "192.168.1.0"; }; testNetworkSlash16 = { expr = cidr.networkStr "172.16.45.67/16"; expected = "172.16.0.0"; }; testBroadcastBasic = { expr = cidr.broadcastStr "192.168.1.0/24"; expected = "192.168.1.255"; }; testBroadcastSlash16 = { expr = cidr.broadcastStr "172.16.0.0/16"; expected = "172.16.255.255"; }; testBroadcastSlash30 = { expr = cidr.broadcastStr "192.168.1.0/30"; expected = "192.168.1.3"; }; testFirstHostBasic = { expr = cidr.firstHostStr "192.168.1.0/24"; expected = "192.168.1.1"; }; testLastHostBasic = { expr = cidr.lastHostStr "192.168.1.0/24"; expected = "192.168.1.254"; }; testFirstHostSlash31 = { expr = cidr.firstHostStr "192.168.1.0/31"; expected = "192.168.1.0"; }; testLastHostSlash31 = { expr = cidr.lastHostStr "192.168.1.0/31"; expected = "192.168.1.1"; }; testFirstHostSlash32 = { expr = cidr.firstHostStr "192.168.1.1/32"; expected = "192.168.1.1"; }; testSize24 = { expr = cidr.size "192.168.1.0/24"; expected = 256; }; testSize16 = { expr = cidr.size "172.16.0.0/16"; expected = 65536; }; testSize32 = { expr = cidr.size "192.168.1.1/32"; expected = 1; }; testSize30 = { expr = cidr.size "192.168.1.0/30"; expected = 4; }; testHostCount24 = { expr = cidr.hostCount "192.168.1.0/24"; expected = 254; }; testHostCount30 = { expr = cidr.hostCount "192.168.1.0/30"; expected = 2; }; testHostCount31 = { expr = cidr.hostCount "192.168.1.0/31"; expected = 2; }; testHostCount32 = { expr = cidr.hostCount "192.168.1.1/32"; expected = 1; }; testContainsTrue = { expr = cidr.contains "10.0.0.0/8" "10.1.2.3"; expected = true; }; testContainsFalse = { expr = cidr.contains "10.0.0.0/8" "192.168.1.1"; expected = false; }; testContainsNetwork = { expr = cidr.contains "192.168.1.0/24" "192.168.1.0"; expected = true; }; testContainsBroadcast = { expr = cidr.contains "192.168.1.0/24" "192.168.1.255"; expected = true; }; testContainsEdgeFalse = { expr = cidr.contains "192.168.1.0/24" "192.168.2.0"; expected = false; }; testIsSubnetOfTrue = { expr = cidr.isSubnetOf "10.0.0.0/8" "10.1.0.0/16"; expected = true; }; testIsSubnetOfFalse = { expr = cidr.isSubnetOf "10.0.0.0/8" "192.168.0.0/16"; expected = false; }; testIsSubnetOfSame = { expr = cidr.isSubnetOf "10.0.0.0/8" "10.0.0.0/8"; expected = true; }; testIsSubnetOfLarger = { expr = cidr.isSubnetOf "10.1.0.0/16" "10.0.0.0/8"; expected = false; }; testHostBasic = { expr = cidr.hostStr "192.168.1.0/24" 5; expected = "192.168.1.5"; }; testHostZero = { expr = cidr.hostStr "192.168.1.0/24" 0; expected = "192.168.1.0"; }; testHostLast = { expr = cidr.hostStr "192.168.1.0/24" 255; expected = "192.168.1.255"; }; testSubnetFirst = { expr = cidr.format (cidr.subnet "192.168.0.0/24" 26 0); expected = "192.168.0.0/26"; }; testSubnetSecond = { expr = cidr.format (cidr.subnet "192.168.0.0/24" 26 1); expected = "192.168.0.64/26"; }; testSubnetLast = { expr = cidr.format (cidr.subnet "192.168.0.0/24" 26 3); expected = "192.168.0.192/26"; }; testSubnetsCount = { expr = builtins.length (cidr.subnets "192.168.0.0/24" 26); expected = 4; }; testSubnetsStr = { expr = cidr.subnetsStr "192.168.0.0/24" 26; expected = [ "192.168.0.0/26" "192.168.0.64/26" "192.168.0.128/26" "192.168.0.192/26" ]; }; testOverlapsTrue = { expr = cidr.overlaps "192.168.1.0/24" "192.168.0.0/16"; expected = true; }; testOverlapsFalse = { expr = cidr.overlaps "192.168.1.0/24" "10.0.0.0/8"; expected = false; }; testOverlapsAdjacent = { expr = cidr.overlaps "192.168.1.0/24" "192.168.2.0/24"; expected = false; }; testPrefixForHosts100 = { expr = cidr.prefixForHosts 100; expected = 25; }; testPrefixForHosts254 = { expr = cidr.prefixForHosts 254; expected = 24; }; testPrefixForHosts1 = { expr = cidr.prefixForHosts 1; expected = 32; }; testPrefixForSize256 = { expr = cidr.prefixForSize 256; expected = 24; }; testPrefixForSize1 = { expr = cidr.prefixForSize 1; expected = 32; }; }