-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Testing utilities for the validity library -- -- Note: There are companion instance packages for this library: -- --
-- instance GenUnchecked Prime where -- genUnchecked = Prime <$> arbitrary ---- --
-- instance GenValid Prime where -- genValid = Prime <$> -- (oneof -- [ pure 2 -- , ((\y -> 2 * abs y + 1) <$> arbitrary) `suchThat` isPrime) -- ]) ---- -- Typical examples of tests involving validity could look as follows: -- --
-- it "succeeds when given valid input" $ do -- forAllValid $ \input -> -- myFunction input `shouldSatisfy` isRight ---- --
-- it "produces valid output when it succeeds" $ do -- forAllUnchecked $ \input -> -- case myFunction input of -- Nothing -> return () -- Can happen -- Just output -> output `shouldSatisfy` isValid --module Data.GenValidity class GValidSubtermsIncl f a gValidSubtermsIncl :: GValidSubtermsIncl f a => f a -> [a] class GValidSubterms f a gValidSubterms :: GValidSubterms f a => f a -> [a] class GValidRecursivelyShrink f gValidRecursivelyShrink :: GValidRecursivelyShrink f => f a -> [f a] class GGenValid f gGenValid :: GGenValid f => Gen (f a) class GUncheckedSubtermsIncl f a gUncheckedSubtermsIncl :: GUncheckedSubtermsIncl f a => f a -> [a] class GUncheckedSubterms f a gUncheckedSubterms :: GUncheckedSubterms f a => f a -> [a] class GUncheckedRecursivelyShrink f gUncheckedRecursivelyShrink :: GUncheckedRecursivelyShrink f => f a -> [f a] class GGenUnchecked f gGenUnchecked :: GGenUnchecked f => Gen (f a) -- | A class of types for which invalid values can be generated. class (Validity a, GenUnchecked a) => GenInvalid a genInvalid :: GenInvalid a => Gen a shrinkInvalid :: GenInvalid a => a -> [a] -- | A class of types for which valid values can be generated. -- -- If you also write Arbitrary instances for GenValid -- types, it may be best to simply write arbitrary = genValid. class (Validity a, GenUnchecked a) => GenValid a genValid :: GenValid a => Gen a -- | Shrink a valid value. -- -- It is important that this shrinking function only shrinks values to -- valid values. If shrinkValid ever shrinks a value to an invalid -- value, the test that is being shrunk for might fail for a different -- reason than for the reason that it originally failed. This would lead -- to very confusing error messages. shrinkValid :: GenValid a => a -> [a] -- | A class of types for which truly arbitrary values can be generated. -- --
-- {-# LANGUAGE DeriveGeneric #-}
--
-- data MyType = MyType Rational String
-- deriving (Show, Eq, Generic)
--
-- instance GenUnchecked MyType
--
--
-- generates something like:
--
-- -- instance GenUnchecked MyType where -- genUnchecked = MyType <$> genUnchecked <*> genUnchecked --class GenUnchecked a genUnchecked :: GenUnchecked a => Gen a genUnchecked :: (GenUnchecked a, Generic a, GGenUnchecked (Rep a)) => Gen a shrinkUnchecked :: GenUnchecked a => a -> [a] shrinkUnchecked :: (GenUnchecked a, Generic a, GUncheckedRecursivelyShrink (Rep a), GUncheckedSubterms (Rep a) a) => a -> [a] shrinkT2 :: (a -> [a]) -> (a, a) -> [(a, a)] shrinkT3 :: (a -> [a]) -> (a, a, a) -> [(a, a, a)] -- | upTo generates an integer between 0 (inclusive) and n. upTo :: Int -> Gen Int -- | 'genSplit a' generates a tuple '(b, c)' such that 'b + c' equals -- a. genSplit :: Int -> Gen (Int, Int) -- | 'genSplit3 a' generates a triple '(b, c, d)' such that 'b + c + d' -- equals a. genSplit3 :: Int -> Gen (Int, Int, Int) -- | 'genSplit4 a' generates a quadruple '(b, c, d, e)' such that 'b + c + -- d + e' equals a. genSplit4 :: Int -> Gen (Int, Int, Int, Int) -- | 'genSplit5 a' generates a quadruple '(b, c, d, e, f)' such that 'b + c -- + d + e + f' equals a. genSplit5 :: Int -> Gen (Int, Int, Int, Int, Int) -- | 'arbPartition n' generates a list ls such that 'sum ls' -- equals n. arbPartition :: Int -> Gen [Int] -- | A version of listOf that takes size into account more -- accurately. genListOf :: Gen a -> Gen [a] genericGenUnchecked :: (Generic a, GGenUnchecked (Rep a)) => Gen a -- | Shrink a term to any of its immediate subterms, and also recursively -- shrink all subterms. genericShrinkUnchecked :: (Generic a, GUncheckedRecursivelyShrink (Rep a), GUncheckedSubterms (Rep a) a) => a -> [a] -- | Recursively shrink all immediate uncheckedSubterms. uncheckedRecursivelyShrink :: (Generic a, GUncheckedRecursivelyShrink (Rep a)) => a -> [a] -- | All immediate uncheckedSubterms of a term. uncheckedSubterms :: (Generic a, GUncheckedSubterms (Rep a) a) => a -> [a] genValidStructurally :: (Validity a, Generic a, GGenValid (Rep a)) => Gen a genValidStructurallyWithoutExtraChecking :: (Generic a, GGenValid (Rep a)) => Gen a -- | Shrink a term to any of its immediate valid subterms, and also -- recursively shrink all subterms. shrinkValidStructurally :: (Validity a, Generic a, GValidRecursivelyShrink (Rep a), GValidSubterms (Rep a) a) => a -> [a] shrinkValidStructurallyWithoutExtraFiltering :: (Generic a, GValidRecursivelyShrink (Rep a), GValidSubterms (Rep a) a) => a -> [a] -- | Recursively shrink all immediate structurally valid subterms. structurallyValidRecursivelyShrink :: (Generic a, GValidRecursivelyShrink (Rep a)) => a -> [a] -- | All immediate validSubterms of a term. structurallyValidSubterms :: (Generic a, GValidSubterms (Rep a) a) => a -> [a] instance (Data.GenValidity.GValidSubtermsIncl f a, Data.GenValidity.GValidSubtermsIncl g a) => Data.GenValidity.GValidSubterms (f GHC.Generics.:*: g) a instance (Data.GenValidity.GValidSubtermsIncl f a, Data.GenValidity.GValidSubtermsIncl g a) => Data.GenValidity.GValidSubterms (f GHC.Generics.:+: g) a instance Data.GenValidity.GValidSubtermsIncl GHC.Generics.V1 a instance Data.GenValidity.GValidSubtermsIncl GHC.Generics.U1 a instance (Data.GenValidity.GValidSubtermsIncl f a, Data.GenValidity.GValidSubtermsIncl g a) => Data.GenValidity.GValidSubtermsIncl (f GHC.Generics.:*: g) a instance (Data.GenValidity.GValidSubtermsIncl f a, Data.GenValidity.GValidSubtermsIncl g a) => Data.GenValidity.GValidSubtermsIncl (f GHC.Generics.:+: g) a instance Data.GenValidity.GValidSubtermsIncl f a => Data.GenValidity.GValidSubtermsIncl (GHC.Generics.M1 i c f) a instance Data.GenValidity.GValidSubtermsIncl (GHC.Generics.K1 i a) a instance Data.GenValidity.GValidSubtermsIncl (GHC.Generics.K1 i a) b instance Data.GenValidity.GValidSubterms GHC.Generics.V1 a instance Data.GenValidity.GValidSubterms GHC.Generics.U1 a instance Data.GenValidity.GValidSubterms f a => Data.GenValidity.GValidSubterms (GHC.Generics.M1 i c f) a instance Data.GenValidity.GValidSubterms (GHC.Generics.K1 i a) b instance (Data.GenValidity.GValidRecursivelyShrink f, Data.GenValidity.GValidRecursivelyShrink g) => Data.GenValidity.GValidRecursivelyShrink (f GHC.Generics.:*: g) instance (Data.GenValidity.GValidRecursivelyShrink f, Data.GenValidity.GValidRecursivelyShrink g) => Data.GenValidity.GValidRecursivelyShrink (f GHC.Generics.:+: g) instance Data.GenValidity.GValidRecursivelyShrink f => Data.GenValidity.GValidRecursivelyShrink (GHC.Generics.M1 i c f) instance Data.GenValidity.GenValid a => Data.GenValidity.GValidRecursivelyShrink (GHC.Generics.K1 i a) instance Data.GenValidity.GValidRecursivelyShrink GHC.Generics.U1 instance Data.GenValidity.GValidRecursivelyShrink GHC.Generics.V1 instance Data.GenValidity.GGenValid GHC.Generics.U1 instance (Data.GenValidity.GGenValid a, Data.GenValidity.GGenValid b) => Data.GenValidity.GGenValid (a GHC.Generics.:*: b) instance (Data.GenValidity.GGenValid a, Data.GenValidity.GGenValid b) => Data.GenValidity.GGenValid (a GHC.Generics.:+: b) instance Data.GenValidity.GGenValid a => Data.GenValidity.GGenValid (GHC.Generics.M1 i c a) instance Data.GenValidity.GenValid a => Data.GenValidity.GGenValid (GHC.Generics.K1 i a) instance (Data.GenValidity.GUncheckedSubtermsIncl f a, Data.GenValidity.GUncheckedSubtermsIncl g a) => Data.GenValidity.GUncheckedSubterms (f GHC.Generics.:*: g) a instance (Data.GenValidity.GUncheckedSubtermsIncl f a, Data.GenValidity.GUncheckedSubtermsIncl g a) => Data.GenValidity.GUncheckedSubterms (f GHC.Generics.:+: g) a instance Data.GenValidity.GUncheckedSubtermsIncl GHC.Generics.V1 a instance Data.GenValidity.GUncheckedSubtermsIncl GHC.Generics.U1 a instance (Data.GenValidity.GUncheckedSubtermsIncl f a, Data.GenValidity.GUncheckedSubtermsIncl g a) => Data.GenValidity.GUncheckedSubtermsIncl (f GHC.Generics.:*: g) a instance (Data.GenValidity.GUncheckedSubtermsIncl f a, Data.GenValidity.GUncheckedSubtermsIncl g a) => Data.GenValidity.GUncheckedSubtermsIncl (f GHC.Generics.:+: g) a instance Data.GenValidity.GUncheckedSubtermsIncl f a => Data.GenValidity.GUncheckedSubtermsIncl (GHC.Generics.M1 i c f) a instance Data.GenValidity.GUncheckedSubtermsIncl (GHC.Generics.K1 i a) a instance Data.GenValidity.GUncheckedSubtermsIncl (GHC.Generics.K1 i a) b instance (Data.GenValidity.GenValid a, Data.GenValidity.GenValid b) => Data.GenValidity.GenValid (a, b) instance (Data.GenValidity.GenValid a, Data.GenValidity.GenValid b) => Data.GenValidity.GenValid (Data.Either.Either a b) instance (Data.GenValidity.GenValid a, Data.GenValidity.GenValid b, Data.GenValidity.GenValid c) => Data.GenValidity.GenValid (a, b, c) instance (Data.GenValidity.GenValid a, Data.GenValidity.GenValid b, Data.GenValidity.GenValid c, Data.GenValidity.GenValid d) => Data.GenValidity.GenValid (a, b, c, d) instance (Data.GenValidity.GenValid a, Data.GenValidity.GenValid b, Data.GenValidity.GenValid c, Data.GenValidity.GenValid d, Data.GenValidity.GenValid e) => Data.GenValidity.GenValid (a, b, c, d, e) instance Data.GenValidity.GenValid a => Data.GenValidity.GenValid (GHC.Maybe.Maybe a) instance Data.GenValidity.GenValid a => Data.GenValidity.GenValid (GHC.Base.NonEmpty a) instance Data.GenValidity.GenValid a => Data.GenValidity.GenValid [a] instance Data.GenValidity.GenValid () instance Data.GenValidity.GenValid GHC.Types.Bool instance Data.GenValidity.GenValid GHC.Types.Ordering instance Data.GenValidity.GenValid GHC.Types.Char instance Data.GenValidity.GenValid GHC.Types.Int instance Data.GenValidity.GenValid GHC.Int.Int8 instance Data.GenValidity.GenValid GHC.Int.Int16 instance Data.GenValidity.GenValid GHC.Int.Int32 instance Data.GenValidity.GenValid GHC.Int.Int64 instance Data.GenValidity.GenValid GHC.Types.Word instance Data.GenValidity.GenValid GHC.Word.Word8 instance Data.GenValidity.GenValid GHC.Word.Word16 instance Data.GenValidity.GenValid GHC.Word.Word32 instance Data.GenValidity.GenValid GHC.Word.Word64 instance Data.GenValidity.GenValid GHC.Types.Float instance Data.GenValidity.GenValid GHC.Types.Double instance Data.GenValidity.GenValid GHC.Integer.Type.Integer instance Data.GenValidity.GenValid GHC.Natural.Natural instance (GHC.Real.Integral a, GHC.Num.Num a, GHC.Classes.Ord a, Data.GenValidity.GenValid a) => Data.GenValidity.GenValid (GHC.Real.Ratio a) instance (GHC.Real.Integral a, GHC.Num.Num a, GHC.Classes.Ord a, Data.GenValidity.GenValid a) => Data.GenValidity.GenInvalid (GHC.Real.Ratio a) instance Data.Fixed.HasResolution a => Data.GenValidity.GenValid (Data.Fixed.Fixed a) instance (Data.GenValidity.GenInvalid a, Data.GenValidity.GenInvalid b) => Data.GenValidity.GenInvalid (a, b) instance (Data.GenValidity.GenInvalid a, Data.GenValidity.GenInvalid b) => Data.GenValidity.GenInvalid (Data.Either.Either a b) instance (Data.GenValidity.GenInvalid a, Data.GenValidity.GenInvalid b, Data.GenValidity.GenInvalid c) => Data.GenValidity.GenInvalid (a, b, c) instance (Data.GenValidity.GenInvalid a, Data.GenValidity.GenInvalid b, Data.GenValidity.GenInvalid c, Data.GenValidity.GenInvalid d) => Data.GenValidity.GenInvalid (a, b, c, d) instance (Data.GenValidity.GenInvalid a, Data.GenValidity.GenInvalid b, Data.GenValidity.GenInvalid c, Data.GenValidity.GenInvalid d, Data.GenValidity.GenInvalid e) => Data.GenValidity.GenInvalid (a, b, c, d, e) instance Data.GenValidity.GenInvalid a => Data.GenValidity.GenInvalid (GHC.Maybe.Maybe a) instance Data.GenValidity.GenInvalid a => Data.GenValidity.GenInvalid (GHC.Base.NonEmpty a) instance Data.GenValidity.GenInvalid a => Data.GenValidity.GenInvalid [a] instance (Data.GenValidity.GenUnchecked a, Data.GenValidity.GenUnchecked b) => Data.GenValidity.GenUnchecked (a, b) instance (Data.GenValidity.GenUnchecked a, Data.GenValidity.GenUnchecked b) => Data.GenValidity.GenUnchecked (Data.Either.Either a b) instance (Data.GenValidity.GenUnchecked a, Data.GenValidity.GenUnchecked b, Data.GenValidity.GenUnchecked c) => Data.GenValidity.GenUnchecked (a, b, c) instance (Data.GenValidity.GenUnchecked a, Data.GenValidity.GenUnchecked b, Data.GenValidity.GenUnchecked c, Data.GenValidity.GenUnchecked d) => Data.GenValidity.GenUnchecked (a, b, c, d) instance (Data.GenValidity.GenUnchecked a, Data.GenValidity.GenUnchecked b, Data.GenValidity.GenUnchecked c, Data.GenValidity.GenUnchecked d, Data.GenValidity.GenUnchecked e) => Data.GenValidity.GenUnchecked (a, b, c, d, e) instance Data.GenValidity.GenUnchecked a => Data.GenValidity.GenUnchecked (GHC.Maybe.Maybe a) instance Data.GenValidity.GenUnchecked a => Data.GenValidity.GenUnchecked (GHC.Base.NonEmpty a) instance Data.GenValidity.GenUnchecked a => Data.GenValidity.GenUnchecked [a] instance Data.GenValidity.GenUnchecked () instance Data.GenValidity.GenUnchecked GHC.Types.Bool instance Data.GenValidity.GenUnchecked GHC.Types.Ordering instance Data.GenValidity.GenUnchecked GHC.Types.Char instance Data.GenValidity.GenUnchecked GHC.Types.Int instance Data.GenValidity.GenUnchecked GHC.Int.Int8 instance Data.GenValidity.GenUnchecked GHC.Int.Int16 instance Data.GenValidity.GenUnchecked GHC.Int.Int32 instance Data.GenValidity.GenUnchecked GHC.Int.Int64 instance Data.GenValidity.GenUnchecked GHC.Types.Word instance Data.GenValidity.GenUnchecked GHC.Word.Word8 instance Data.GenValidity.GenUnchecked GHC.Word.Word16 instance Data.GenValidity.GenUnchecked GHC.Word.Word32 instance Data.GenValidity.GenUnchecked GHC.Word.Word64 instance Data.GenValidity.GenUnchecked GHC.Types.Float instance Data.GenValidity.GenUnchecked GHC.Types.Double instance Data.GenValidity.GenUnchecked GHC.Integer.Type.Integer instance Data.GenValidity.GenUnchecked GHC.Natural.Natural instance (GHC.Real.Integral a, Data.GenValidity.GenUnchecked a) => Data.GenValidity.GenUnchecked (GHC.Real.Ratio a) instance Data.Fixed.HasResolution a => Data.GenValidity.GenUnchecked (Data.Fixed.Fixed a) instance Data.GenValidity.GenUnchecked a => Data.GenValidity.GGenUnchecked (GHC.Generics.K1 i a) instance Data.GenValidity.GenUnchecked a => Data.GenValidity.GUncheckedRecursivelyShrink (GHC.Generics.K1 i a) instance Data.GenValidity.GUncheckedSubterms GHC.Generics.V1 a instance Data.GenValidity.GUncheckedSubterms GHC.Generics.U1 a instance Data.GenValidity.GUncheckedSubterms f a => Data.GenValidity.GUncheckedSubterms (GHC.Generics.M1 i c f) a instance Data.GenValidity.GUncheckedSubterms (GHC.Generics.K1 i a) b instance (Data.GenValidity.GUncheckedRecursivelyShrink f, Data.GenValidity.GUncheckedRecursivelyShrink g) => Data.GenValidity.GUncheckedRecursivelyShrink (f GHC.Generics.:*: g) instance (Data.GenValidity.GUncheckedRecursivelyShrink f, Data.GenValidity.GUncheckedRecursivelyShrink g) => Data.GenValidity.GUncheckedRecursivelyShrink (f GHC.Generics.:+: g) instance Data.GenValidity.GUncheckedRecursivelyShrink f => Data.GenValidity.GUncheckedRecursivelyShrink (GHC.Generics.M1 i c f) instance Data.GenValidity.GUncheckedRecursivelyShrink GHC.Generics.U1 instance Data.GenValidity.GUncheckedRecursivelyShrink GHC.Generics.V1 instance Data.GenValidity.GGenUnchecked GHC.Generics.U1 instance (Data.GenValidity.GGenUnchecked a, Data.GenValidity.GGenUnchecked b) => Data.GenValidity.GGenUnchecked (a GHC.Generics.:*: b) instance (Data.GenValidity.GGenUnchecked a, Data.GenValidity.GGenUnchecked b) => Data.GenValidity.GGenUnchecked (a GHC.Generics.:+: b) instance Data.GenValidity.GGenUnchecked a => Data.GenValidity.GGenUnchecked (GHC.Generics.M1 i c a) module Data.GenRelativeValidity class (GenUnchecked a, RelativeValidity a b, GenRelativeUnchecked a b) => GenRelativeInvalid a b genInvalidFor :: GenRelativeInvalid a b => b -> Gen a class (GenValid a, RelativeValidity a b) => GenRelativeValid a b genValidFor :: GenRelativeValid a b => b -> Gen a class (GenUnchecked a, RelativeValidity a b) => GenRelativeUnchecked a b genUncheckedFor :: GenRelativeUnchecked a b => b -> Gen a