]> gitweb.michael.orlitzky.com - hath.git/blobdiff - src/Cidr.hs
Added the prop_contains_proper_intransitive QuickCheck property, and fixed the defini...
[hath.git] / src / Cidr.hs
index 5c9fefd66e6714c5a6eeeb62718ccffd668345b8..94de1234c4ae9616f7b9d351a5b9a0f6ba434bc7 100644 (file)
@@ -3,7 +3,10 @@ module Cidr
   cidr_from_string,
   cidr_tests,
   combine_all,
-  prop_all_cidrs_contain_themselves
+  contains,
+  contains_proper,
+  prop_all_cidrs_contain_themselves,
+  prop_contains_proper_intransitive
 ) where
 
 import Data.List (nubBy)
@@ -124,7 +127,7 @@ contains (Cidr addr1 mbits1) (Cidr addr2 mbits2)
 
 contains_proper :: Cidr -> Cidr -> Bool
 contains_proper cidr1 cidr2 =
-    (cidr1 `contains` cidr2) && (not (cidr1 == cidr2))
+    (cidr1 `contains` cidr2) && (not (cidr2 `contains` cidr1))
 
 
 -- A CIDR range is redundant (with respect to the given list) if
@@ -296,3 +299,10 @@ cidr_tests = [ test_equality1,
 prop_all_cidrs_contain_themselves :: Cidr -> Bool
 prop_all_cidrs_contain_themselves cidr1 = cidr1 `contains` cidr1
 
+
+-- If cidr1 properly contains cidr2, then by definition cidr2
+-- does not properly contain cidr1.
+prop_contains_proper_intransitive :: Cidr -> Cidr -> Property
+prop_contains_proper_intransitive cidr1 cidr2 =
+    (cidr1 `contains_proper` cidr2) ==>
+      (not (cidr2 `contains_proper` cidr1))