{-# OPTIONS_GHC -fno-warn-orphans #-}

module Data.GenValidity.Map
  ( genMapOf,
    shrinkMapOf,
  )
where

import Data.GenValidity
import Data.Map (Map)
import qualified Data.Map as M
import Data.Validity.Map ()
import Test.QuickCheck

instance (Show k, Ord k, GenValid k, GenValid v) => GenValid (Map k v) where
  genValid :: Gen (Map k v)
genValid = forall k v. Ord k => Gen (k, v) -> Gen (Map k v)
genMapOf forall a. GenValid a => Gen a
genValid
  shrinkValid :: Map k v -> [Map k v]
shrinkValid = forall k v. Ord k => ((k, v) -> [(k, v)]) -> Map k v -> [Map k v]
shrinkMapOf forall a. GenValid a => a -> [a]
shrinkValid

genMapOf :: Ord k => Gen (k, v) -> Gen (Map k v)
genMapOf :: forall k v. Ord k => Gen (k, v) -> Gen (Map k v)
genMapOf Gen (k, v)
g = forall k a. Ord k => [(k, a)] -> Map k a
M.fromList forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Gen a -> Gen [a]
genListOf Gen (k, v)
g

shrinkMapOf :: Ord k => ((k, v) -> [(k, v)]) -> Map k v -> [Map k v]
shrinkMapOf :: forall k v. Ord k => ((k, v) -> [(k, v)]) -> Map k v -> [Map k v]
shrinkMapOf (k, v) -> [(k, v)]
shrinker = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall k a. Ord k => [(k, a)] -> Map k a
M.fromList forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> [a]) -> [a] -> [[a]]
shrinkList (k, v) -> [(k, v)]
shrinker forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k a. Map k a -> [(k, a)]
M.toList