X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FCidr.hs;h=427be15e6665719905da333a237d43c4597eb0fd;hb=f5fe2e052e033696b36071b568be6568a5a47db0;hp=5c9fefd66e6714c5a6eeeb62718ccffd668345b8;hpb=0be56eaa64ab03adf3aa1f3f3c14a191c09045c8;p=hath.git diff --git a/src/Cidr.hs b/src/Cidr.hs index 5c9fefd..427be15 100644 --- a/src/Cidr.hs +++ b/src/Cidr.hs @@ -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 @@ -261,7 +264,7 @@ test_adjacent4 = test_combine_contained1 :: Test test_combine_contained1 = - TestCase $ assertEqual "10.0.0.0/8, 10.1.0.0/16, and 10.1.1.0/24 combine to 10.0.0.0/8" expected_cidrs (combine_all test_cidrs) + TestCase $ assertEqual "10.0.0.0/8, 10.1.0.0/16, and 10.1.1.0/24 combine to 10.0.0.0/8" expected_cidrs (combine_contained test_cidrs) where cidr1 = cidr_from_string "10.0.0.0/8" cidr2 = cidr_from_string "10.1.0.0/16" @@ -272,9 +275,10 @@ test_combine_contained1 = test_combine_contained2 :: Test test_combine_contained2 = - TestCase $ assertEqual "192.168.1.0/24 combines with itself" [cidr1] (combine_all [cidr1, cidr1]) + TestCase $ assertEqual "192.168.3.0/23 does not contain 192.168.1.0/24" [cidr1, cidr2] (combine_contained [cidr1, cidr2]) where - cidr1 = cidr_from_string "192.168.1.0/24" + cidr1 = cidr_from_string "192.168.3.0/23" + cidr2 = cidr_from_string "192.168.1.0/24" cidr_tests :: [Test] @@ -296,3 +300,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))