{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Test.QuickCheck.Instances.Semigroup () where
import Prelude ()
import Test.QuickCheck.Instances.CustomPrelude
import Control.Applicative (liftA2)
import Data.List.NonEmpty (NonEmpty (..), nonEmpty)
import Data.Maybe (mapMaybe)
import Test.QuickCheck
import qualified Data.Semigroup as Semi
instance Arbitrary1 NonEmpty where
liftArbitrary :: forall a. Gen a -> Gen (NonEmpty a)
liftArbitrary Gen a
arb = forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 forall a. a -> [a] -> NonEmpty a
(:|) Gen a
arb (forall (f :: * -> *) a. Arbitrary1 f => Gen a -> Gen (f a)
liftArbitrary Gen a
arb)
liftShrink :: forall a. (a -> [a]) -> NonEmpty a -> [NonEmpty a]
liftShrink a -> [a]
shr (a
x :| [a]
xs) = forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe forall a. [a] -> Maybe (NonEmpty a)
nonEmpty forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a. Arbitrary1 f => (a -> [a]) -> f a -> [f a]
liftShrink a -> [a]
shr forall a b. (a -> b) -> a -> b
$ a
x forall a. a -> [a] -> [a]
: [a]
xs
instance Arbitrary a => Arbitrary (NonEmpty a) where
arbitrary :: Gen (NonEmpty a)
arbitrary = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: NonEmpty a -> [NonEmpty a]
shrink = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (NonEmpty a) where
coarbitrary :: forall b. NonEmpty a -> Gen b -> Gen b
coarbitrary (a
x :| [a]
xs) = forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary (a
x, [a]
xs)
instance Function a => Function (NonEmpty a) where
function :: forall b. (NonEmpty a -> b) -> NonEmpty a :-> b
function = forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap forall {a}. NonEmpty a -> (a, [a])
g forall {a}. (a, [a]) -> NonEmpty a
h
where
g :: NonEmpty a -> (a, [a])
g (a
x :| [a]
xs) = (a
x, [a]
xs)
h :: (a, [a]) -> NonEmpty a
h (a
x, [a]
xs) = a
x forall a. a -> [a] -> NonEmpty a
:| [a]
xs
instance Arbitrary1 Semi.Min where
liftArbitrary :: forall a. Gen a -> Gen (Min a)
liftArbitrary Gen a
arb = forall a. a -> Min a
Semi.Min forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
liftShrink :: forall a. (a -> [a]) -> Min a -> [Min a]
liftShrink a -> [a]
shr = forall a b. (a -> b) -> [a] -> [b]
map forall a. a -> Min a
Semi.Min forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Min a -> a
Semi.getMin
instance Arbitrary a => Arbitrary (Semi.Min a) where
arbitrary :: Gen (Min a)
arbitrary = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: Min a -> [Min a]
shrink = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.Min a) where
coarbitrary :: forall b. Min a -> Gen b -> Gen b
coarbitrary = forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Min a -> a
Semi.getMin
instance Function a => Function (Semi.Min a) where
function :: forall b. (Min a -> b) -> Min a :-> b
function = forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap forall a. Min a -> a
Semi.getMin forall a. a -> Min a
Semi.Min
instance Arbitrary1 Semi.Max where
liftArbitrary :: forall a. Gen a -> Gen (Max a)
liftArbitrary Gen a
arb = forall a. a -> Max a
Semi.Max forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
liftShrink :: forall a. (a -> [a]) -> Max a -> [Max a]
liftShrink a -> [a]
shr = forall a b. (a -> b) -> [a] -> [b]
map forall a. a -> Max a
Semi.Max forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Max a -> a
Semi.getMax
instance Arbitrary a => Arbitrary (Semi.Max a) where
arbitrary :: Gen (Max a)
arbitrary = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: Max a -> [Max a]
shrink = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.Max a) where
coarbitrary :: forall b. Max a -> Gen b -> Gen b
coarbitrary = forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Max a -> a
Semi.getMax
instance Function a => Function (Semi.Max a) where
function :: forall b. (Max a -> b) -> Max a :-> b
function = forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap forall a. Max a -> a
Semi.getMax forall a. a -> Max a
Semi.Max
instance Arbitrary1 Semi.First where
liftArbitrary :: forall a. Gen a -> Gen (First a)
liftArbitrary Gen a
arb = forall a. a -> First a
Semi.First forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
liftShrink :: forall a. (a -> [a]) -> First a -> [First a]
liftShrink a -> [a]
shr = forall a b. (a -> b) -> [a] -> [b]
map forall a. a -> First a
Semi.First forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. First a -> a
Semi.getFirst
instance Arbitrary a => Arbitrary (Semi.First a) where
arbitrary :: Gen (First a)
arbitrary = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: First a -> [First a]
shrink = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.First a) where
coarbitrary :: forall b. First a -> Gen b -> Gen b
coarbitrary = forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. First a -> a
Semi.getFirst
instance Function a => Function (Semi.First a) where
function :: forall b. (First a -> b) -> First a :-> b
function = forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap forall a. First a -> a
Semi.getFirst forall a. a -> First a
Semi.First
instance Arbitrary1 Semi.Last where
liftArbitrary :: forall a. Gen a -> Gen (Last a)
liftArbitrary Gen a
arb = forall a. a -> Last a
Semi.Last forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
liftShrink :: forall a. (a -> [a]) -> Last a -> [Last a]
liftShrink a -> [a]
shr = forall a b. (a -> b) -> [a] -> [b]
map forall a. a -> Last a
Semi.Last forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Last a -> a
Semi.getLast
instance Arbitrary a => Arbitrary (Semi.Last a) where
arbitrary :: Gen (Last a)
arbitrary = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: Last a -> [Last a]
shrink = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.Last a) where
coarbitrary :: forall b. Last a -> Gen b -> Gen b
coarbitrary = forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Last a -> a
Semi.getLast
instance Function a => Function (Semi.Last a) where
function :: forall b. (Last a -> b) -> Last a :-> b
function = forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap forall a. Last a -> a
Semi.getLast forall a. a -> Last a
Semi.Last
instance Arbitrary1 Semi.WrappedMonoid where
liftArbitrary :: forall a. Gen a -> Gen (WrappedMonoid a)
liftArbitrary Gen a
arb = forall m. m -> WrappedMonoid m
Semi.WrapMonoid forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
liftShrink :: forall a. (a -> [a]) -> WrappedMonoid a -> [WrappedMonoid a]
liftShrink a -> [a]
shr = forall a b. (a -> b) -> [a] -> [b]
map forall m. m -> WrappedMonoid m
Semi.WrapMonoid forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall m. WrappedMonoid m -> m
Semi.unwrapMonoid
instance Arbitrary a => Arbitrary (Semi.WrappedMonoid a) where
arbitrary :: Gen (WrappedMonoid a)
arbitrary = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: WrappedMonoid a -> [WrappedMonoid a]
shrink = forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.WrappedMonoid a) where
coarbitrary :: forall b. WrappedMonoid a -> Gen b -> Gen b
coarbitrary = forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall m. WrappedMonoid m -> m
Semi.unwrapMonoid
instance Function a => Function (Semi.WrappedMonoid a) where
function :: forall b. (WrappedMonoid a -> b) -> WrappedMonoid a :-> b
function = forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap forall m. WrappedMonoid m -> m
Semi.unwrapMonoid forall m. m -> WrappedMonoid m
Semi.WrapMonoid
#if !(MIN_VERSION_base(4,16,0))
instance Arbitrary1 Semi.Option where
liftArbitrary arb = Semi.Option <$> liftArbitrary arb
liftShrink shr = map Semi.Option . liftShrink shr . Semi.getOption
instance Arbitrary a => Arbitrary (Semi.Option a) where
arbitrary = arbitrary1
shrink = shrink1
instance CoArbitrary a => CoArbitrary (Semi.Option a) where
coarbitrary = coarbitrary . Semi.getOption
instance Function a => Function (Semi.Option a) where
function = functionMap Semi.getOption Semi.Option
#endif