X-Git-Url: http://gitweb.michael.orlitzky.com/?p=hath.git;a=blobdiff_plain;f=src%2FCidr.hs;h=d41ba11dc2b9eef533701a11c6011144641b6d82;hp=a07117d5382842b94d23f87fe469c6831c997aad;hb=d32fe2f0a6c83ba3046a405eda40f83c794c000d;hpb=22b9c60a6badcc6cb68902965d6f810634e30693 diff --git a/src/Cidr.hs b/src/Cidr.hs index a07117d..d41ba11 100644 --- a/src/Cidr.hs +++ b/src/Cidr.hs @@ -1,6 +1,7 @@ module Cidr ( Cidr(..), cidr_from_string, + cidr_properties, cidr_tests, combine_all, contains, @@ -19,8 +20,12 @@ module Cidr import Data.List (nubBy) import Data.Maybe (catMaybes, fromJust) -import Test.HUnit -import Test.QuickCheck + +import Test.HUnit (assertEqual) +import Test.Framework (Test, testGroup) +import Test.Framework.Providers.HUnit (testCase) +import Test.Framework.Providers.QuickCheck2 (testProperty) +import Test.QuickCheck (Arbitrary(..), Gen, Property, (==>)) import qualified Bit as B import IPv4Address @@ -235,137 +240,151 @@ adjacent cidr1 cidr2 test_min_host1 :: Test test_min_host1 = - TestCase $ assertEqual "The minimum host in 10.0.0.0/24 is 10.0.0.0" - expected - actual + testCase desc $ + assertEqual desc + expected + actual where + desc = "The minimum host in 10.0.0.0/24 is 10.0.0.0" actual = show $ min_host (fromJust $ cidr_from_string "10.0.0.0/24") expected = "10.0.0.0" test_max_host1 :: Test test_max_host1 = - TestCase $ assertEqual "The maximum host in 10.0.0.0/24 is 10.0.0.255" - expected - actual + testCase desc $ + assertEqual desc + expected + actual where + desc = "The maximum host in 10.0.0.0/24 is 10.0.0.255" actual = show $ max_host (fromJust $ cidr_from_string "10.0.0.0/24") expected = "10.0.0.255" test_equality1 :: Test test_equality1 = - TestCase $ + testCase desc $ assertEqual - "10.1.1.0/23 equals itself" + desc True (cidr1 == cidr1) where + desc = "10.1.1.0/23 equals itself" cidr1 = fromJust $ cidr_from_string "10.1.1.0/23" test_contains1 :: Test test_contains1 = - TestCase $ + testCase desc $ assertEqual - "10.1.1.0/23 contains 10.1.1.0/24" + desc True (cidr1 `contains` cidr2) where + desc = "10.1.1.0/23 contains 10.1.1.0/24" cidr1 = fromJust $ cidr_from_string "10.1.1.0/23" cidr2 = fromJust $ cidr_from_string "10.1.1.0/24" test_contains2 :: Test test_contains2 = - TestCase $ + testCase desc $ assertEqual - "10.1.1.0/23 contains itself" + desc True (cidr1 `contains` cidr1) where + desc = "10.1.1.0/23 contains itself" cidr1 = fromJust $ cidr_from_string "10.1.1.0/23" test_contains_proper1 :: Test test_contains_proper1 = - TestCase $ + testCase desc $ assertEqual - "10.1.1.0/23 contains 10.1.1.0/24 properly" + desc True (cidr1 `contains_proper` cidr2) where + desc = "10.1.1.0/23 contains 10.1.1.0/24 properly" cidr1 = fromJust $ cidr_from_string "10.1.1.0/23" cidr2 = fromJust $ cidr_from_string "10.1.1.0/24" test_contains_proper2 :: Test test_contains_proper2 = - TestCase $ + testCase desc $ assertEqual - "10.1.1.0/23 does not contain itself properly" + desc False (cidr1 `contains_proper` cidr1) where + desc = "10.1.1.0/23 does not contain itself properly" cidr1 = fromJust $ cidr_from_string "10.1.1.0/23" test_adjacent1 :: Test test_adjacent1 = - TestCase $ + testCase desc $ assertEqual - "10.1.0.0/24 is adjacent to 10.1.1.0/24" + desc True (cidr1 `adjacent` cidr2) where + desc = "10.1.0.0/24 is adjacent to 10.1.1.0/24" cidr1 = fromJust $ cidr_from_string "10.1.0.0/24" cidr2 = fromJust $ cidr_from_string "10.1.1.0/24" test_adjacent2 :: Test test_adjacent2 = - TestCase $ + testCase desc $ assertEqual - "10.1.0.0/23 is not adjacent to 10.1.0.0/24" + desc False (cidr1 `adjacent` cidr2) where + desc = "10.1.0.0/23 is not adjacent to 10.1.0.0/24" cidr1 = fromJust $ cidr_from_string "10.1.0.0/23" cidr2 = fromJust $ cidr_from_string "10.1.0.0/24" test_adjacent3 :: Test test_adjacent3 = - TestCase $ + testCase desc $ assertEqual - "10.1.0.0/24 is not adjacent to 10.2.5.0/24" + desc False (cidr1 `adjacent` cidr2) where + desc = "10.1.0.0/24 is not adjacent to 10.2.5.0/24" cidr1 = fromJust $ cidr_from_string "10.1.0.0/24" cidr2 = fromJust $ cidr_from_string "10.2.5.0/24" test_adjacent4 :: Test test_adjacent4 = - TestCase $ + testCase desc $ assertEqual - "10.1.1.0/24 is not adjacent to 10.1.2.0/24" + desc False (cidr1 `adjacent` cidr2) where + desc = "10.1.1.0/24 is not adjacent to 10.1.2.0/24" cidr1 = fromJust $ cidr_from_string "10.1.1.0/24" cidr2 = fromJust $ cidr_from_string "10.1.2.0/24" test_combine_contained1 :: Test test_combine_contained1 = - TestCase $ + testCase desc $ assertEqual - "10.0.0.0/8, 10.1.0.0/16, and 10.1.1.0/24 combine to 10.0.0.0/8" + desc expected_cidrs (combine_contained test_cidrs) where + desc = "10.0.0.0/8, 10.1.0.0/16, and 10.1.1.0/24 combine to 10.0.0.0/8" cidr1 = fromJust $ cidr_from_string "10.0.0.0/8" cidr2 = fromJust $ cidr_from_string "10.1.0.0/16" cidr3 = fromJust $ cidr_from_string "10.1.1.0/24" @@ -375,24 +394,27 @@ test_combine_contained1 = test_combine_contained2 :: Test test_combine_contained2 = - TestCase $ + testCase desc $ assertEqual - "192.168.3.0/23 does not contain 192.168.1.0/24" + desc [cidr1, cidr2] (combine_contained [cidr1, cidr2]) where + desc = "192.168.3.0/23 does not contain 192.168.1.0/24" cidr1 = fromJust $ cidr_from_string "192.168.3.0/23" cidr2 = fromJust $ cidr_from_string "192.168.1.0/24" test_combine_all1 :: Test test_combine_all1 = - TestCase $ + testCase desc $ assertEqual - "10.0.0.0/24 is adjacent to 10.0.1.0/24 and 10.0.3.0/23 contains 10.0.2.0/24" + desc expected_cidrs (combine_all test_cidrs) where + desc = "10.0.0.0/24 is adjacent to 10.0.1.0/24 " + ++ "and 10.0.3.0/23 contains 10.0.2.0/24" cidr1 = fromJust $ cidr_from_string "10.0.0.0/24" cidr2 = fromJust $ cidr_from_string "10.0.1.0/24" cidr3 = fromJust $ cidr_from_string "10.0.2.0/24" @@ -404,12 +426,13 @@ test_combine_all1 = test_combine_all2 :: Test test_combine_all2 = - TestCase $ + testCase desc $ assertEqual - "127.0.0.1/32 combines with itself recursively" + desc expected_cidrs (combine_all test_cidrs) where + desc = "127.0.0.1/32 combines with itself recursively" cidr1 = fromJust $ cidr_from_string "127.0.0.1/32" expected_cidrs = [cidr1] test_cidrs = [cidr1, cidr1, cidr1, cidr1, cidr1] @@ -417,12 +440,14 @@ test_combine_all2 = test_combine_all3 :: Test test_combine_all3 = - TestCase $ + testCase desc $ assertEqual - "10.0.0.16, 10.0.0.17, 10.0.0.18, and 10.0.0.19 get combined into 10.0.0.16/30" + desc expected_cidrs (combine_all test_cidrs) where + desc = "10.0.0.16, 10.0.0.17, 10.0.0.18, and " + ++ "10.0.0.19 get combined into 10.0.0.16/30" cidr1 = fromJust $ cidr_from_string "10.0.0.16/32" cidr2 = fromJust $ cidr_from_string "10.0.0.17/32" cidr3 = fromJust $ cidr_from_string "10.0.0.18/32" @@ -431,24 +456,25 @@ test_combine_all3 = test_cidrs = [cidr1, cidr2, cidr3, cidr4] -cidr_tests :: [Test] -cidr_tests = [ test_min_host1, - test_max_host1, - test_equality1, - test_contains1, - test_contains2, - test_contains_proper1, - test_contains_proper2, - test_adjacent1, - test_adjacent2, - test_adjacent3, - test_adjacent4, - test_combine_contained1, - test_combine_contained2, - test_combine_all1, - test_combine_all2, - test_combine_all3 - ] +cidr_tests :: Test +cidr_tests = + testGroup "CIDR Tests" [ + test_min_host1, + test_max_host1, + test_equality1, + test_contains1, + test_contains2, + test_contains_proper1, + test_contains_proper2, + test_adjacent1, + test_adjacent2, + test_adjacent3, + test_adjacent4, + test_combine_contained1, + test_combine_contained2, + test_combine_all1, + test_combine_all2, + test_combine_all3 ] -- QuickCheck Tests @@ -462,3 +488,15 @@ prop_contains_proper_intransitive :: Cidr -> Cidr -> Property prop_contains_proper_intransitive cidr1 cidr2 = (cidr1 `contains_proper` cidr2) ==> (not (cidr2 `contains_proper` cidr1)) + +cidr_properties :: Test +cidr_properties = + testGroup "CIDR Properties" [ + testProperty + "All CIDRs contain themselves" + prop_all_cidrs_contain_themselves, + + testProperty + "contains_proper is intransitive" + prop_contains_proper_intransitive + ]