{-# 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 :: Gen a -> Gen (NonEmpty a)
liftArbitrary arb :: Gen a
arb = (a -> [a] -> NonEmpty a) -> Gen a -> Gen [a] -> Gen (NonEmpty a)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 a -> [a] -> NonEmpty a
forall a. a -> [a] -> NonEmpty a
(:|) Gen a
arb (Gen a -> Gen [a]
forall (f :: * -> *) a. Arbitrary1 f => Gen a -> Gen (f a)
liftArbitrary Gen a
arb)
liftShrink :: (a -> [a]) -> NonEmpty a -> [NonEmpty a]
liftShrink shr :: a -> [a]
shr (x :: a
x :| xs :: [a]
xs) = ([a] -> Maybe (NonEmpty a)) -> [[a]] -> [NonEmpty a]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe [a] -> Maybe (NonEmpty a)
forall a. [a] -> Maybe (NonEmpty a)
nonEmpty ([[a]] -> [NonEmpty a]) -> ([a] -> [[a]]) -> [a] -> [NonEmpty a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> [a]) -> [a] -> [[a]]
forall (f :: * -> *) a. Arbitrary1 f => (a -> [a]) -> f a -> [f a]
liftShrink a -> [a]
shr ([a] -> [NonEmpty a]) -> [a] -> [NonEmpty a]
forall a b. (a -> b) -> a -> b
$ a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: [a]
xs
instance Arbitrary a => Arbitrary (NonEmpty a) where
arbitrary :: Gen (NonEmpty a)
arbitrary = Gen (NonEmpty a)
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: NonEmpty a -> [NonEmpty a]
shrink = NonEmpty a -> [NonEmpty a]
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (NonEmpty a) where
coarbitrary :: NonEmpty a -> Gen b -> Gen b
coarbitrary (x :: a
x :| xs :: [a]
xs) = (a, [a]) -> Gen b -> Gen b
forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary (a
x, [a]
xs)
instance Function a => Function (NonEmpty a) where
function :: (NonEmpty a -> b) -> NonEmpty a :-> b
function = (NonEmpty a -> (a, [a]))
-> ((a, [a]) -> NonEmpty a)
-> (NonEmpty a -> b)
-> NonEmpty a :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap NonEmpty a -> (a, [a])
forall a. NonEmpty a -> (a, [a])
g (a, [a]) -> NonEmpty a
forall a. (a, [a]) -> NonEmpty a
h
where
g :: NonEmpty a -> (a, [a])
g (x :: a
x :| xs :: [a]
xs) = (a
x, [a]
xs)
h :: (a, [a]) -> NonEmpty a
h (x :: a
x, xs :: [a]
xs) = a
x a -> [a] -> NonEmpty a
forall a. a -> [a] -> NonEmpty a
:| [a]
xs
instance Arbitrary1 Semi.Min where
liftArbitrary :: Gen a -> Gen (Min a)
liftArbitrary arb :: Gen a
arb = a -> Min a
forall a. a -> Min a
Semi.Min (a -> Min a) -> Gen a -> Gen (Min a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
liftShrink :: (a -> [a]) -> Min a -> [Min a]
liftShrink shr :: a -> [a]
shr = (a -> Min a) -> [a] -> [Min a]
forall a b. (a -> b) -> [a] -> [b]
map a -> Min a
forall a. a -> Min a
Semi.Min ([a] -> [Min a]) -> (Min a -> [a]) -> Min a -> [Min a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr (a -> [a]) -> (Min a -> a) -> Min a -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Min a -> a
forall a. Min a -> a
Semi.getMin
instance Arbitrary a => Arbitrary (Semi.Min a) where
arbitrary :: Gen (Min a)
arbitrary = Gen (Min a)
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: Min a -> [Min a]
shrink = Min a -> [Min a]
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.Min a) where
coarbitrary :: Min 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) -> (Min a -> a) -> Min a -> Gen b -> Gen b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Min a -> a
forall a. Min a -> a
Semi.getMin
instance Function a => Function (Semi.Min a) where
function :: (Min a -> b) -> Min a :-> b
function = (Min a -> a) -> (a -> Min a) -> (Min a -> b) -> Min a :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap Min a -> a
forall a. Min a -> a
Semi.getMin a -> Min a
forall a. a -> Min a
Semi.Min
instance Arbitrary1 Semi.Max where
liftArbitrary :: Gen a -> Gen (Max a)
liftArbitrary arb :: Gen a
arb = a -> Max a
forall a. a -> Max a
Semi.Max (a -> Max a) -> Gen a -> Gen (Max a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
liftShrink :: (a -> [a]) -> Max a -> [Max a]
liftShrink shr :: a -> [a]
shr = (a -> Max a) -> [a] -> [Max a]
forall a b. (a -> b) -> [a] -> [b]
map a -> Max a
forall a. a -> Max a
Semi.Max ([a] -> [Max a]) -> (Max a -> [a]) -> Max a -> [Max a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr (a -> [a]) -> (Max a -> a) -> Max a -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Max a -> a
forall a. Max a -> a
Semi.getMax
instance Arbitrary a => Arbitrary (Semi.Max a) where
arbitrary :: Gen (Max a)
arbitrary = Gen (Max a)
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: Max a -> [Max a]
shrink = Max a -> [Max a]
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.Max a) where
coarbitrary :: Max 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) -> (Max a -> a) -> Max a -> Gen b -> Gen b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Max a -> a
forall a. Max a -> a
Semi.getMax
instance Function a => Function (Semi.Max a) where
function :: (Max a -> b) -> Max a :-> b
function = (Max a -> a) -> (a -> Max a) -> (Max a -> b) -> Max a :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap Max a -> a
forall a. Max a -> a
Semi.getMax a -> Max a
forall a. a -> Max a
Semi.Max
instance Arbitrary1 Semi.First where
liftArbitrary :: Gen a -> Gen (First a)
liftArbitrary arb :: Gen a
arb = a -> First a
forall a. a -> First a
Semi.First (a -> First a) -> Gen a -> Gen (First a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
liftShrink :: (a -> [a]) -> First a -> [First a]
liftShrink shr :: a -> [a]
shr = (a -> First a) -> [a] -> [First a]
forall a b. (a -> b) -> [a] -> [b]
map a -> First a
forall a. a -> First a
Semi.First ([a] -> [First a]) -> (First a -> [a]) -> First a -> [First a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr (a -> [a]) -> (First a -> a) -> First a -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. First a -> a
forall a. First a -> a
Semi.getFirst
instance Arbitrary a => Arbitrary (Semi.First a) where
arbitrary :: Gen (First a)
arbitrary = Gen (First a)
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: First a -> [First a]
shrink = First a -> [First a]
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.First a) where
coarbitrary :: First 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)
-> (First a -> a) -> First a -> Gen b -> Gen b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. First a -> a
forall a. First a -> a
Semi.getFirst
instance Function a => Function (Semi.First a) where
function :: (First a -> b) -> First a :-> b
function = (First a -> a) -> (a -> First a) -> (First a -> b) -> First a :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap First a -> a
forall a. First a -> a
Semi.getFirst a -> First a
forall a. a -> First a
Semi.First
instance Arbitrary1 Semi.Last where
liftArbitrary :: Gen a -> Gen (Last a)
liftArbitrary arb :: Gen a
arb = a -> Last a
forall a. a -> Last a
Semi.Last (a -> Last a) -> Gen a -> Gen (Last a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
liftShrink :: (a -> [a]) -> Last a -> [Last a]
liftShrink shr :: a -> [a]
shr = (a -> Last a) -> [a] -> [Last a]
forall a b. (a -> b) -> [a] -> [b]
map a -> Last a
forall a. a -> Last a
Semi.Last ([a] -> [Last a]) -> (Last a -> [a]) -> Last a -> [Last a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr (a -> [a]) -> (Last a -> a) -> Last a -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Last a -> a
forall a. Last a -> a
Semi.getLast
instance Arbitrary a => Arbitrary (Semi.Last a) where
arbitrary :: Gen (Last a)
arbitrary = Gen (Last a)
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: Last a -> [Last a]
shrink = Last a -> [Last a]
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.Last a) where
coarbitrary :: Last 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) -> (Last a -> a) -> Last a -> Gen b -> Gen b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Last a -> a
forall a. Last a -> a
Semi.getLast
instance Function a => Function (Semi.Last a) where
function :: (Last a -> b) -> Last a :-> b
function = (Last a -> a) -> (a -> Last a) -> (Last a -> b) -> Last a :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap Last a -> a
forall a. Last a -> a
Semi.getLast a -> Last a
forall a. a -> Last a
Semi.Last
instance Arbitrary1 Semi.WrappedMonoid where
liftArbitrary :: Gen a -> Gen (WrappedMonoid a)
liftArbitrary arb :: Gen a
arb = a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
Semi.WrapMonoid (a -> WrappedMonoid a) -> Gen a -> Gen (WrappedMonoid a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb
liftShrink :: (a -> [a]) -> WrappedMonoid a -> [WrappedMonoid a]
liftShrink shr :: a -> [a]
shr = (a -> WrappedMonoid a) -> [a] -> [WrappedMonoid a]
forall a b. (a -> b) -> [a] -> [b]
map a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
Semi.WrapMonoid ([a] -> [WrappedMonoid a])
-> (WrappedMonoid a -> [a]) -> WrappedMonoid a -> [WrappedMonoid a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [a]
shr (a -> [a]) -> (WrappedMonoid a -> a) -> WrappedMonoid a -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WrappedMonoid a -> a
forall m. WrappedMonoid m -> m
Semi.unwrapMonoid
instance Arbitrary a => Arbitrary (Semi.WrappedMonoid a) where
arbitrary :: Gen (WrappedMonoid a)
arbitrary = Gen (WrappedMonoid a)
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: WrappedMonoid a -> [WrappedMonoid a]
shrink = WrappedMonoid a -> [WrappedMonoid a]
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.WrappedMonoid a) where
coarbitrary :: WrappedMonoid 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)
-> (WrappedMonoid a -> a) -> WrappedMonoid a -> Gen b -> Gen b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WrappedMonoid a -> a
forall m. WrappedMonoid m -> m
Semi.unwrapMonoid
instance Function a => Function (Semi.WrappedMonoid a) where
function :: (WrappedMonoid a -> b) -> WrappedMonoid a :-> b
function = (WrappedMonoid a -> a)
-> (a -> WrappedMonoid a)
-> (WrappedMonoid a -> b)
-> WrappedMonoid a :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap WrappedMonoid a -> a
forall m. WrappedMonoid m -> m
Semi.unwrapMonoid a -> WrappedMonoid a
forall m. m -> WrappedMonoid m
Semi.WrapMonoid
#if !(MIN_VERSION_base(4,16,0))
instance Arbitrary1 Semi.Option where
liftArbitrary :: Gen a -> Gen (Option a)
liftArbitrary arb :: Gen a
arb = Maybe a -> Option a
forall a. Maybe a -> Option a
Semi.Option (Maybe a -> Option a) -> Gen (Maybe a) -> Gen (Option a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a -> Gen (Maybe a)
forall (f :: * -> *) a. Arbitrary1 f => Gen a -> Gen (f a)
liftArbitrary Gen a
arb
liftShrink :: (a -> [a]) -> Option a -> [Option a]
liftShrink shr :: a -> [a]
shr = (Maybe a -> Option a) -> [Maybe a] -> [Option a]
forall a b. (a -> b) -> [a] -> [b]
map Maybe a -> Option a
forall a. Maybe a -> Option a
Semi.Option ([Maybe a] -> [Option a])
-> (Option a -> [Maybe a]) -> Option a -> [Option a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> [a]) -> Maybe a -> [Maybe a]
forall (f :: * -> *) a. Arbitrary1 f => (a -> [a]) -> f a -> [f a]
liftShrink a -> [a]
shr (Maybe a -> [Maybe a])
-> (Option a -> Maybe a) -> Option a -> [Maybe a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Option a -> Maybe a
forall a. Option a -> Maybe a
Semi.getOption
instance Arbitrary a => Arbitrary (Semi.Option a) where
arbitrary :: Gen (Option a)
arbitrary = Gen (Option a)
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => Gen (f a)
arbitrary1
shrink :: Option a -> [Option a]
shrink = Option a -> [Option a]
forall (f :: * -> *) a. (Arbitrary1 f, Arbitrary a) => f a -> [f a]
shrink1
instance CoArbitrary a => CoArbitrary (Semi.Option a) where
coarbitrary :: Option a -> Gen b -> Gen b
coarbitrary = Maybe a -> Gen b -> Gen b
forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary (Maybe a -> Gen b -> Gen b)
-> (Option a -> Maybe a) -> Option a -> Gen b -> Gen b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Option a -> Maybe a
forall a. Option a -> Maybe a
Semi.getOption
instance Function a => Function (Semi.Option a) where
function :: (Option a -> b) -> Option a :-> b
function = (Option a -> Maybe a)
-> (Maybe a -> Option a) -> (Option a -> b) -> Option a :-> b
forall b a c.
Function b =>
(a -> b) -> (b -> a) -> (a -> c) -> a :-> c
functionMap Option a -> Maybe a
forall a. Option a -> Maybe a
Semi.getOption Maybe a -> Option a
forall a. Maybe a -> Option a
Semi.Option
#endif