X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FCidr.hs;h=94de1234c4ae9616f7b9d351a5b9a0f6ba434bc7;hb=a23ed449c784cdf81501c696bec10b1fbaeefc5f;hp=5c9fefd66e6714c5a6eeeb62718ccffd668345b8;hpb=1ba6b199192c6b5bddb486446ebfeff88a6309b9;p=hath.git diff --git a/src/Cidr.hs b/src/Cidr.hs index 5c9fefd..94de123 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 @@ -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))