module Control.Rematch.HashMap.Lazy where import Data.Hashable import Data.HashMap.Lazy import Data.HashMap.Lazy as M import Control.Rematch isEmptyMap :: (Show k, Show v, Hashable k) => Matcher (HashMap k v) isEmptyMap = Matcher { match = M.null , description = "isEmptyMap" , describeMismatch = standardMismatch } hasSize :: (Show k, Show v, Hashable k) => Int -> Matcher (HashMap k v) hasSize n = Matcher { match = (== n) . M.size , description = "hasSize " ++ show n , describeMismatch = (\m -> "had size " ++ show (M.size m)) } hasKey :: (Show k, Show v, Hashable k, Eq k) => k -> Matcher (HashMap k v) hasKey k = Matcher { match = M.member k , description = "hasKey " ++ show k , describeMismatch = standardMismatch } hasValueAt :: (Show k, Show v, Hashable k, Eq k, Eq v) => k -> v -> Matcher (HashMap k v) hasValueAt k v = Matcher { match = (== Just v) . (M.lookup k) , description = "hasValueAt " ++ show k ++ " " ++ show v , describeMismatch = (\m -> "was " ++ show (M.lookup k m)) } containsMap :: (Show k, Show v, Hashable k, Eq k) => HashMap k v -> Matcher (HashMap k v) containsMap m = Matcher { match = (M.null) . (M.difference m) , description = "containsMap " ++ show m , describeMismatch = standardMismatch } hasKeys :: (Show k, Show v, Hashable k, Eq k) => [k] -> Matcher (HashMap k v) hasKeys ks = Matcher { match = (== ks) . M.keys , description = "hasKeys " ++ show ks , describeMismatch = (\m -> "had keys " ++ show (M.keys m)) } hasValues :: (Show k, Show v, Hashable k, Eq v) => [v] -> Matcher (HashMap k v) hasValues vs = Matcher { match = (== vs) . M.elems , description = "hasValues " ++ show vs , describeMismatch = (\m -> "had values " ++ show (M.elems m)) }