packages feed

unordered-containers-rematch-0.1.0.0: Control/Rematch/HashMap/Lazy.hs

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))
  }