{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Test.QuickCheck.Instances.UnorderedContainers () where
import Prelude ()
import Test.QuickCheck.Instances.CustomPrelude
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 = HS.fromList <$> arbitrary
shrink hashset = HS.fromList <$> shrink (HS.toList hashset)
instance CoArbitrary a => CoArbitrary (HS.HashSet a) where
coarbitrary = coarbitrary . HS.toList
instance (Hashable a, Eq a, Function a) => Function (HS.HashSet a) where
function = functionMap HS.toList HS.fromList
instance (Hashable k, Eq k, Arbitrary k) => Arbitrary1 (HML.HashMap k) where
liftArbitrary arb =
HML.fromList <$> liftArbitrary (liftArbitrary2 arbitrary arb)
liftShrink shr m =
HML.fromList <$> liftShrink (liftShrink2 shrink shr) (HML.toList m)
instance (Hashable k, Eq k, Arbitrary k, Arbitrary v) => Arbitrary (HML.HashMap k v) where
arbitrary = arbitrary1
shrink = shrink1
instance (CoArbitrary k, CoArbitrary v) => CoArbitrary (HML.HashMap k v) where
coarbitrary = coarbitrary . HML.toList
instance (Hashable k, Eq k, Function k, Function v) => Function (HML.HashMap k v) where
function = functionMap HML.toList HML.fromList