]> gitweb.michael.orlitzky.com - hath.git/blobdiff - src/Cidr.hs
Add some more tests; minor code cleanup.
[hath.git] / src / Cidr.hs
index 002ec0b849fc08d555a2e6ab221212143c51d160..b5b3f744fd56651848387d7e010766bd328adb19 100644 (file)
@@ -8,6 +8,7 @@ module Cidr
   combine_all,
   contains,
   contains_proper,
+  enumerate,
   max_octet1,
   max_octet2,
   max_octet3,
@@ -22,13 +23,14 @@ module Cidr
 
 import Data.List (nubBy)
 import Data.List.Split (splitOneOf)
-import Data.Maybe (catMaybes, fromJust)
+import Data.Maybe (catMaybes, fromJust, mapMaybe)
 
 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 Text.Read (readMaybe)
 
 import qualified Bit as B
 import IPv4Address
@@ -77,7 +79,7 @@ maskbits_from_cidr_string s
 --   of its octets (as Ints).
 octets_from_cidr_string :: String -> [Octet]
 octets_from_cidr_string s =
-  catMaybes $ map octet_from_string (take 4 (splitOneOf "./" s))
+  mapMaybe readMaybe (take 4 (splitOneOf "./" s))
 
 
 -- | Return Nothing if we can't parse both maskbits and octets from
@@ -165,7 +167,7 @@ max_octet4 cidr = octet4 (max_host cidr)
 --   cidr1, then at least mbits1 of an address in cidr2 will match
 --   cidr1. For example,
 --
---   cidr1 = 192.168.1.0/23, cidr2 = 192.168.1.100/24
+--   cidr1 = 192.168.1.0\/23, cidr2 = 192.168.1.100\/24
 --
 --   Here, cidr2 contains all of 192.168.1.0 through
 --   192.168.1.255. However, cidr1 contains BOTH 192.168.0.0 through
@@ -254,7 +256,8 @@ adjacent cidr1 cidr2
     mbits2 = maskbits cidr2
 
 
-
+enumerate :: Cidr -> [IPv4Address]
+enumerate cidr = [(min_host cidr)..(max_host cidr)]
 
 
 -- HUnit Tests