packages feed

iproute 1.0.0 → 1.1.0

raw patch · 5 files changed

+106/−8 lines, 5 files

Files

Data/IP/Addr.hs view
@@ -1,7 +1,6 @@ module Data.IP.Addr where  import Control.Monad-import Control.Applicative import Data.Bits import Data.Char import Data.List (foldl')
Data/IP/RouteTable.hs view
@@ -15,7 +15,7 @@   -- ** Type for IP routing table   , IPRTable   -- ** Functions to manipulate an IP routing table-  , empty, insert+  , empty, insert, delete   , Data.IP.RouteTable.Internal.lookup   , fromList, toList   ) where
Data/IP/RouteTable/Internal.hs view
@@ -140,6 +140,26 @@ ----------------------------------------------------------------  {-|+  The 'delete' function deletes a value by a key of 'AddrRange' from 'IPRTable'+  and returns a new 'IPRTable'.+-}+delete :: (Routable k) => AddrRange k -> IPRTable k a -> IPRTable k a+delete _ Nil = Nil+delete k1 s@(Node k2 tb2 v2 l r)+  | k1 == k2  = node k2 tb2 Nothing l r+  | k2 >:> k1 = if isLeft k1 tb2+                then node k2 tb2 v2 (delete k1 l) r+                else node k2 tb2 v2 l (delete k1 r)+  | otherwise = s++node :: (Routable k) => AddrRange k -> k -> (Maybe a) -> IPRTable k a -> IPRTable k a -> IPRTable k a+node _ _ Nothing Nil r = r+node _ _ Nothing l Nil = l+node k tb v      l   r = Node k tb v l r++----------------------------------------------------------------++{-|   The 'lookup' function looks up 'IPRTable' with a key of 'AddrRange'   and returns its value if exists. -}
iproute.cabal view
@@ -1,5 +1,5 @@ Name:                   iproute-Version:                1.0.0+Version:                1.1.0 Author:                 Kazu Yamamoto <kazu@iij.ad.jp> Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp> License:                BSD3
test/Tests.hs view
@@ -26,10 +26,20 @@              , testProperty "Sort IPv6" prop_sort_ipv6              , testProperty "FromTo IPv4" prop_fromto_ipv4              , testProperty "FromTo IPv6" prop_fromto_ipv6+             , testProperty "Insert lookup IPv4" prop_insert_lookup_ipv4+             , testProperty "Insert lookup IPv6" prop_insert_lookup_ipv6              , testProperty "Search IPv4" prop_search_ipv4              , testProperty "Search IPv6" prop_search_ipv6              , testProperty "Ord IPv4" prop_ord_ipv4              , testProperty "Ord IPv6" prop_ord_ipv6+             , testProperty "Delete IPv4" prop_delete_ipv4+             , testProperty "Delete IPv6" prop_delete_ipv6+             , testProperty "Insert delete IPv4" prop_insert_delete_ipv4+             , testProperty "Insert delete IPv6" prop_insert_delete_ipv6+             , testProperty "Delete insert IPv4" prop_delete_insert_ipv4+             , testProperty "Delete insert IPv6" prop_delete_insert_ipv6+             , testProperty "Delete lookup IPv4" prop_delete_lookup_ipv4+             , testProperty "Delete lookup IPv6" prop_delete_lookup_ipv6              ]         , testGroup "Test case for routing table" [                testCase "fromto IPv4" test_fromto_ipv4@@ -90,8 +100,9 @@ prop_sort_ipv6 = sort_ip  sort_ip :: (Routable a, Ord a) => [AddrRange a] -> Bool-sort_ip xs = fromList (zip xs xs) == let xs' = sort xs-                                     in fromList (zip xs' xs')+sort_ip xs = fromList (zip xs xs) == fromList (zip xs' xs')+  where+    xs' = sort xs  ---------------------------------------------------------------- @@ -102,8 +113,9 @@ prop_fromto_ipv6 = fromto_ip  fromto_ip :: (Routable a, Ord a) => [AddrRange a] -> Bool-fromto_ip xs = let ys = map fst $ toList $ fromList (zip xs xs)-               in nub (sort xs) == nub (sort ys)+fromto_ip xs = nub (sort xs) == nub (sort ys)+  where+   ys = map fst . toList . fromList $ zip xs xs  ---------------------------------------------------------------- @@ -114,7 +126,7 @@ prop_ord_ipv6 = ord_ip  ord_ip :: Routable a => [AddrRange a] -> Bool-ord_ip xs = isOrdered (fromList (zip xs xs))+ord_ip xs = isOrdered . fromList $ zip xs xs  isOrdered :: Routable k => IPRTable k a -> Bool isOrdered = foldt (\x v -> v && ordered x) True@@ -128,6 +140,18 @@  ---------------------------------------------------------------- +prop_insert_lookup_ipv4 :: AddrRange IPv4 -> [AddrRange IPv4] -> Bool+prop_insert_lookup_ipv4 = insert_lookup_ip++prop_insert_lookup_ipv6 :: AddrRange IPv6 -> [AddrRange IPv6] -> Bool+prop_insert_lookup_ipv6 = insert_lookup_ip++insert_lookup_ip :: Routable a => AddrRange a -> [AddrRange a] -> Bool+insert_lookup_ip k xs = lookup k (insert k k t) == Just k+  where+    rs = zip xs xs+    t = fromList rs+ prop_search_ipv4 :: AddrRange IPv4 -> [AddrRange IPv4] -> Bool prop_search_ipv4 = search_ip @@ -149,6 +173,61 @@                         then linear' (Just x) k xs                         else linear' (Just a) k xs           | otherwise = linear' (Just a) k xs++----------------------------------------------------------------++prop_delete_ipv4 :: [AddrRange IPv6] -> Property+prop_delete_ipv4 = delete_ip++prop_delete_ipv6 :: [AddrRange IPv6] -> Property+prop_delete_ipv6 = delete_ip++delete_ip :: Routable a => [AddrRange a] -> Property+delete_ip xs = xs /= [] ==> isOrdered (delete i t)+  where+    rs = zip xs xs+    t = fromList rs+    i = head xs++prop_insert_delete_ipv4 :: AddrRange IPv4 -> [AddrRange IPv4] -> Property+prop_insert_delete_ipv4 = insert_delete_ip++prop_insert_delete_ipv6 :: AddrRange IPv6 -> [AddrRange IPv6] -> Property+prop_insert_delete_ipv6 = insert_delete_ip++insert_delete_ip :: Routable a => AddrRange a -> [AddrRange a] -> Property+insert_delete_ip k xs = lookup k t == Nothing ==> delete k (insert k k t) == t+  where+    rs = zip xs xs+    t = fromList rs++prop_delete_insert_ipv4 :: [AddrRange IPv4] -> Property+prop_delete_insert_ipv4 = delete_insert_ip++prop_delete_insert_ipv6 :: [AddrRange IPv6] -> Property+prop_delete_insert_ipv6 = delete_insert_ip++delete_insert_ip :: Routable a => [AddrRange a] -> Property+delete_insert_ip xs = xs /= [] ==> insert k k (delete k t) == t+  where+    rs = zip xs xs+    t = fromList rs+    k = head xs++prop_delete_lookup_ipv4 :: [AddrRange IPv4] -> Property+prop_delete_lookup_ipv4 = delete_lookup_ip++prop_delete_lookup_ipv6 :: [AddrRange IPv6] -> Property+prop_delete_lookup_ipv6 = delete_lookup_ip++delete_lookup_ip :: Routable a => [AddrRange a] -> Property+delete_lookup_ip xs = xs /= [] ==> case lookup k (delete k t) of+    Nothing -> True+    Just r  -> r /= k && r >:> k+  where+    rs = zip xs xs+    t = fromList rs+    k = head xs  ----------------------------------------------------------------