{-# OPTIONS_GHC -fno-warn-orphans #-} module Cursor.Map.Gen ( genMapCursorBy, genMapCursorByDependent, ) where import Cursor.List.NonEmpty.Gen import Cursor.Map import Cursor.Map.KeyValue.Gen import Data.GenValidity import Data.GenValidity.Containers () import Test.QuickCheck instance (GenValid kc, GenValid vc, GenValid k, GenValid v) => GenValid (MapCursor kc vc k v) where genValid :: Gen (MapCursor kc vc k v) genValid = Gen kc -> Gen vc -> Gen k -> Gen v -> Gen (MapCursor kc vc k v) forall kc vc k v. Gen kc -> Gen vc -> Gen k -> Gen v -> Gen (MapCursor kc vc k v) genMapCursorBy Gen kc forall a. GenValid a => Gen a genValid Gen vc forall a. GenValid a => Gen a genValid Gen k forall a. GenValid a => Gen a genValid Gen v forall a. GenValid a => Gen a genValid shrinkValid :: MapCursor kc vc k v -> [MapCursor kc vc k v] shrinkValid = MapCursor kc vc k v -> [MapCursor kc vc k v] forall a. (Generic a, GValidRecursivelyShrink (Rep a), GValidSubterms (Rep a) a) => a -> [a] shrinkValidStructurallyWithoutExtraFiltering genMapCursorBy :: Gen kc -> Gen vc -> Gen k -> Gen v -> Gen (MapCursor kc vc k v) genMapCursorBy :: Gen kc -> Gen vc -> Gen k -> Gen v -> Gen (MapCursor kc vc k v) genMapCursorBy Gen kc genKC Gen vc genVC Gen k genK Gen v genV = NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v forall kc vc k v. NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v MapCursor (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v) -> Gen (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> Gen (MapCursor kc vc k v) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen (KeyValueCursor kc vc k v) -> Gen (k, v) -> Gen (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) forall a b. Gen a -> Gen b -> Gen (NonEmptyCursor a b) genNonEmptyCursorBy (Gen kc -> Gen vc -> Gen k -> Gen v -> Gen (KeyValueCursor kc vc k v) forall kc vc k v. Gen kc -> Gen vc -> Gen k -> Gen v -> Gen (KeyValueCursor kc vc k v) genKeyValueCursorBy Gen kc genKC Gen vc genVC Gen k genK Gen v genV) ((,) (k -> v -> (k, v)) -> Gen k -> Gen (v -> (k, v)) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen k genK Gen (v -> (k, v)) -> Gen v -> Gen (k, v) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Gen v genV) genMapCursorByDependent :: Gen (kc, v) -> Gen (k, vc) -> Gen (k, v) -> Gen (MapCursor kc vc k v) genMapCursorByDependent :: Gen (kc, v) -> Gen (k, vc) -> Gen (k, v) -> Gen (MapCursor kc vc k v) genMapCursorByDependent Gen (kc, v) genKVCK Gen (k, vc) genKVCV Gen (k, v) genKV = NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v forall kc vc k v. NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v MapCursor (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v) -> MapCursor kc vc k v) -> Gen (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) -> Gen (MapCursor kc vc k v) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Gen (KeyValueCursor kc vc k v) -> Gen (k, v) -> Gen (NonEmptyCursor (KeyValueCursor kc vc k v) (k, v)) forall a b. Gen a -> Gen b -> Gen (NonEmptyCursor a b) genNonEmptyCursorBy (Gen (kc, v) -> Gen (k, vc) -> Gen (KeyValueCursor kc vc k v) forall kc v k vc. Gen (kc, v) -> Gen (k, vc) -> Gen (KeyValueCursor kc vc k v) genKeyValueCursorByDependent Gen (kc, v) genKVCK Gen (k, vc) genKVCV) Gen (k, v) genKV