iproute 1.0.0 → 1.1.0
raw patch · 5 files changed
+106/−8 lines, 5 files
Files
- Data/IP/Addr.hs +0/−1
- Data/IP/RouteTable.hs +1/−1
- Data/IP/RouteTable/Internal.hs +20/−0
- iproute.cabal +1/−1
- test/Tests.hs +84/−5
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 ----------------------------------------------------------------