]> gitweb.michael.orlitzky.com - hath.git/commitdiff
Ensure sane ordering of CIDRs with equal masks with a new property.
authorMichael Orlitzky <michael@orlitzky.com>
Mon, 17 Apr 2017 13:52:29 +0000 (09:52 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 17 Apr 2017 13:52:29 +0000 (09:52 -0400)
src/Cidr.hs

index af9c9e8ba55a6c9aaaa5190baf4800599a1623cc..007e94b9425ae819e3c624ae4765bdf3017d3a42 100644 (file)
@@ -307,7 +307,8 @@ cidr_properties =
       prop_normalize_preserves_equality,
       prop_ord_instance_antisymmetric,
       prop_ord_instance_reflexive,
-      prop_ord_instance_transitive ]
+      prop_ord_instance_transitive,
+      prop_ord_uses_addr_when_masks_equal ]
 
 
 -- HUnit Tests
@@ -593,3 +594,18 @@ prop_ord_instance_antisymmetric =
     prop :: Cidr -> Cidr -> Property
     prop cidr1 cidr2 =
       (cidr1 <= cidr2 && cidr2 <= cidr1) ==> cidr1 == cidr2
+
+
+-- When comparing two CIDRs with the same mask, the comparison
+-- should be numeric (i.e. whatever the IPv4Address does).
+-- Of course, we have to normalize first.
+prop_ord_uses_addr_when_masks_equal :: TestTree
+prop_ord_uses_addr_when_masks_equal =
+  testProperty "The CIDR order is the IPv4Address order for equal masks" prop
+  where
+    prop :: Cidr -> Cidr -> Property
+    prop cidr1 cidr2 =
+      (mask1 == mask2) ==> (cidr1 <= cidr2) == (addr1 <= addr2)
+      where
+        (Cidr addr1 mask1) = normalize cidr1
+        (Cidr addr2 mask2) = normalize cidr2