{-# OPTIONS_GHC -Wno-orphans #-}

module Test.Data.VMap.Arbitrary () where

import qualified Data.VMap as VMap
import Test.QuickCheck
import Test.QuickCheck.Instances ()

instance
  (Ord k, VMap.Vector kv k, VMap.Vector vv v, Arbitrary k, Arbitrary v) =>
  Arbitrary (VMap.VMap kv vv k v)
  where
  arbitrary :: Gen (VMap kv vv k v)
arbitrary = Map k v -> VMap kv vv k v
forall (kv :: * -> *) k (vv :: * -> *) v.
(Vector kv k, Vector vv v) =>
Map k v -> VMap kv vv k v
VMap.fromMap (Map k v -> VMap kv vv k v)
-> Gen (Map k v) -> Gen (VMap kv vv k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Map k v)
forall a. Arbitrary a => Gen a
arbitrary
  shrink :: VMap kv vv k v -> [VMap kv vv k v]
shrink = ([(k, v)] -> VMap kv vv k v) -> [[(k, v)]] -> [VMap kv vv k v]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(k, v)] -> VMap kv vv k v
forall k (kv :: * -> *) (vv :: * -> *) v.
(Ord k, Vector kv k, Vector vv v) =>
[(k, v)] -> VMap kv vv k v
VMap.fromList ([[(k, v)]] -> [VMap kv vv k v])
-> (VMap kv vv k v -> [[(k, v)]])
-> VMap kv vv k v
-> [VMap kv vv k v]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(k, v)] -> [[(k, v)]]
forall a. Arbitrary a => a -> [a]
shrink ([(k, v)] -> [[(k, v)]])
-> (VMap kv vv k v -> [(k, v)]) -> VMap kv vv k v -> [[(k, v)]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. VMap kv vv k v -> [(k, v)]
forall (kv :: * -> *) k (vv :: * -> *) v.
(Vector kv k, Vector vv v) =>
VMap kv vv k v -> [(k, v)]
VMap.toList