{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Test.QuickCheck.Instances.UnorderedContainers () where
import Prelude ()
import Prelude.Compat
import Data.Hashable (Hashable)
import Test.QuickCheck
import qualified Data.HashMap.Lazy as HML
import qualified Data.HashSet as HS
instance (Hashable a, Eq a, Arbitrary a) => Arbitrary (HS.HashSet a) where
arbitrary :: Gen (HashSet a)
arbitrary = [a] -> HashSet a
forall a. (Eq a, Hashable a) => [a] -> HashSet a
HS.fromList ([a] -> HashSet a) -> Gen [a] -> Gen (HashSet a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen [a]
forall a. Arbitrary a => Gen a
arbitrary
shrink :: HashSet a -> [HashSet a]
shrink hashset :: HashSet a
hashset = [a] -> HashSet a
forall a. (Eq a, Hashable a) => [a] -> HashSet a
HS.fromList ([a] -> HashSet a) -> [[a]] -> [HashSet a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [a] -> [[a]]
forall a. Arbitrary a => a -> [a]
shrink (HashSet a -> [a]
forall a. HashSet a -> [a]
HS.toList HashSet a
hashset)
instance CoArbitrary a => CoArbitrary (HS.HashSet a) where
coarbitrary :: HashSet a -> Gen b -> Gen b
coarbitrary = [a] -> Gen b -> Gen b
forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary ([a] -> Gen b -> Gen b)
-> (HashSet a -> [a]) -> HashSet a -> Gen b -> Gen b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HashSet a -> [a]
forall a. HashSet a -> [a]
HS.toList
instance (Hashable a, Eq a, Function a) => Function (HS.HashSet a) where
function :: (HashSet a -> b) -> HashSet a :-> b
function = (HashSet a -> [a])
-> ([a] -> HashSet a) -> (HashSet a -> b) -> HashSet a :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap HashSet a -> [a]
forall a. HashSet a -> [a]
HS.toList [a] -> HashSet a
forall a. (Eq a, Hashable a) => [a] -> HashSet a
HS.fromList
instance (Hashable k, Eq k, Arbitrary k) => Arbitrary1 (HML.HashMap k) where
liftArbitrary :: Gen a -> Gen (HashMap k a)
liftArbitrary arb :: Gen a
arb =
[(k, a)] -> HashMap k a
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HML.fromList ([(k, a)] -> HashMap k a) -> Gen [(k, a)] -> Gen (HashMap k a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (k, a) -> Gen [(k, a)]
forall (f :: * -> *) a. Arbitrary1 f => Gen a -> Gen (f a)
liftArbitrary (Gen k -> Gen a -> Gen (k, a)
forall (f :: * -> * -> *) a b.
Arbitrary2 f =>
Gen a -> Gen b -> Gen (f a b)
liftArbitrary2 Gen k
forall a. Arbitrary a => Gen a
arbitrary Gen a
arb)
liftShrink :: (a -> [a]) -> HashMap k a -> [HashMap k a]
liftShrink shr :: a -> [a]
shr m :: HashMap k a
m =
[(k, a)] -> HashMap k a
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HML.fromList ([(k, a)] -> HashMap k a) -> [[(k, a)]] -> [HashMap k a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((k, a) -> [(k, a)]) -> [(k, a)] -> [[(k, a)]]
forall (f :: * -> *) a. Arbitrary1 f => (a -> [a]) -> f a -> [f a]
liftShrink ((k -> [k]) -> (a -> [a]) -> (k, a) -> [(k, a)]
forall (f :: * -> * -> *) a b.
Arbitrary2 f =>
(a -> [a]) -> (b -> [b]) -> f a b -> [f a b]
liftShrink2 k -> [k]
forall a. Arbitrary a => a -> [a]
shrink a -> [a]
shr) (HashMap k a -> [(k, a)]
forall k v. HashMap k v -> [(k, v)]
HML.toList HashMap k a
m)
instance (Hashable k, Eq k, Arbitrary k, Arbitrary v) => Arbitrary (HML.HashMap k v) where
arbitrary :: Gen (HashMap k v)
arbitrary = Gen (HashMap k v)
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: HashMap k v -> [HashMap k v]
shrink = HashMap k v -> [HashMap k v]
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance (CoArbitrary k, CoArbitrary v) => CoArbitrary (HML.HashMap k v) where
coarbitrary :: HashMap k v -> Gen b -> Gen b
coarbitrary = [(k, v)] -> Gen b -> Gen b
forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary ([(k, v)] -> Gen b -> Gen b)
-> (HashMap k v -> [(k, v)]) -> HashMap k v -> Gen b -> Gen b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HashMap k v -> [(k, v)]
forall k v. HashMap k v -> [(k, v)]
HML.toList
instance (Hashable k, Eq k, Function k, Function v) => Function (HML.HashMap k v) where
function :: (HashMap k v -> b) -> HashMap k v :-> b
function = (HashMap k v -> [(k, v)])
-> ([(k, v)] -> HashMap k v)
-> (HashMap k v -> b)
-> HashMap k v :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap HashMap k v -> [(k, v)]
forall k v. HashMap k v -> [(k, v)]
HML.toList [(k, v)] -> HashMap k v
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HML.fromList