Current section
Files
Jump to
Current section
Files
tests/Test/Data/Map.phi
module Test.Data.Map where
import Test.QuickCheck (TestGroup(..), TestResult, quickCheck)
import Prelude
import Data.Map as M
propMapPutGet :: M.Map Integer String -> Integer -> String -> Boolean
propMapPutGet m k v = let m1 = M.put k v m
v1 = M.get k m1
in v == v1
propMapPutMember :: M.Map Integer String -> Integer -> String -> Boolean
propMapPutMember m k v = let m1 = M.put k v m
in M.member k m1
propMapFilter :: M.Map Integer Integer -> Integer -> Boolean
propMapFilter m v = let m1 = M.filter (\(k,_) -> k > v) m
vs = map (\k -> k > v) $ map fst $ M.toList m1
in foldl (&&) true vs
propMapMerge :: M.Map Integer Integer -> Boolean
propMapMerge m1 = M.merge m1 m1 == m1
propMapFTList :: M.Map Integer Integer -> Boolean
propMapFTList m = M.fromList (M.toList m) == m
propMapMap :: M.Map Integer Integer -> (Integer -> Integer) -> Boolean
propMapMap m1 f = let l1 = M.toList m1
lf = \(k,v) -> (k, f v)
lf1 = \(k,v) -> f v
in M.fromList (map lf l1) == M.mapWithKey lf1 m1
propInsert :: M.Map Integer Integer -> Integer -> Integer -> Boolean
propInsert m k v = M.insert k v m == M.insert k v (M.insert k v m)
propEq :: M.Map Integer Integer -> Boolean
propEq x = x == x
baseMap :: M.Map Integer Integer
baseMap = M.fromList [(1,2),(2,3),(3,4)]
test :: TestGroup (Integer -> IO TestResult)
test = Exe [ quickCheck "put_get " propMapPutGet
, quickCheck "put_member " propMapPutMember
, quickCheck "map " propMapMap
, quickCheck "isEmpty_empty" (M.isEmpty M.empty)
, quickCheck "singleton" (M.singleton 1 2 == M.fromList [(1,2)])
, quickCheck "isKey" (M.isKey 1 baseMap)
, quickCheck "insert" (M.insert 1 3 baseMap == M.fromList [(1,3),(2,3),(3,4)])
, quickCheck "prop_insert" propInsert
, quickCheck "get" (M.get 1 baseMap == 2)
, quickCheck "lookup_Just" (M.lookup 1 baseMap == Just 2)
, quickCheck "lookup_Nothing" (M.lookup 10 baseMap == Nothing)
, quickCheck "map" (M.mapWithKey (\(k,v) -> v+1) baseMap == M.fromList [(1,3),(2,4),(3,5)])
, quickCheck "member_true" (M.member 1 baseMap == true)
, quickCheck "member_false" (M.member 10 baseMap == false)
, quickCheck "not_member" (M.notMember 10 baseMap == true)
, quickCheck "update" (M.update 1 10 baseMap == M.fromList [(1,10),(2,3),(3,4)])
, quickCheck "updateWith" (M.updateWith 1 (\x -> x+1) baseMap == M.fromList [(1,3),(2,3),(3,4)])
, quickCheck "updateWithInit" (M.updateWithInit 10 (\x -> x+1) 10 baseMap == M.fromList [(1,2),(2,3),(3,4),(10,10)])
, quickCheck "take" (case M.take 1 baseMap of
Just (2, v) -> v == M.fromList [(2,3),(3,4)]
_ -> error "error happened"
)
, quickCheck "delete" (M.delete 1 baseMap == M.fromList [(2,3),(3,4)])
, quickCheck "size" (M.size baseMap == 3)
, quickCheck "filter" propMapFilter
, quickCheck "merge " propMapMerge
-- , quickCheck "assocs " (M.assocs baseMap == [(1,3),(2,3),(3,4)])
, quickCheck "keys " (M.keys baseMap == [1,2,3])
, quickCheck "valuse " (M.values baseMap == [2,3,4])
, quickCheck "fromList_toList " propMapFTList
, quickCheck "eq" propEq
, quickCheck "show" (show baseMap == "[(1, 2), (2, 3), (3, 4)]")
, quickCheck "ord" (baseMap < M.fromList [(2, 1), (2, 3), (3, 4)])
]