-- 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 -- forAll genValid $ \input -> -- myFunction input `shouldSatisfy` isRight ---- --
-- it "produces valid output when it succeeds" $ do -- forAll genUnchecked $ \input -> -- case myFunction input of -- Nothing -> return () -- Can happen -- Just output -> output `shouldSatisfy` isValid --module Data.GenValidity -- | A class of types for which truly arbitrary values can be generated. class GenUnchecked a where genUnchecked = to <$> gGenUnchecked genUnchecked :: GenUnchecked a => Gen a genUnchecked :: (GenUnchecked a, Generic a, GGenUnchecked (Rep a)) => Gen 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 where genValid = genUnchecked `suchThat` isValid genValid :: GenValid a => Gen a -- | A class of types for which invalid values can be generated. class (Validity a, GenUnchecked a) => GenInvalid a where genInvalid = genUnchecked `suchThat` (not . isValid) genInvalid :: GenInvalid a => Gen a -- | This instance ensures that the generated tupse contains at least one -- invalid element. The other element is unchecked. -- | This instance ensures that the generated triple contains at least one -- invalid element. The other two are unchecked. -- | If we can generate values of a certain type, we can also generate -- lists of them. -- | This instance ensures that the generated list contains at least one -- element that satisfies isInvalid. The rest is unchecked. -- | Either NaN or Infinity. -- | Either NaN or Infinity. -- | 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) -- | 'genSplit a' generates a triple '(b, c, d)' such that 'b + c + d' -- equals a. genSplit3 :: Int -> Gen (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] class GGenUnchecked f gGenUnchecked :: GGenUnchecked f => Gen (f a) instance (Data.GenValidity.GenUnchecked a, Data.GenValidity.GenUnchecked b) => Data.GenValidity.GenUnchecked (a, b) instance (Data.GenValidity.GenValid a, Data.GenValidity.GenValid b) => Data.GenValidity.GenValid (a, b) instance (Data.GenValidity.GenInvalid a, Data.GenValidity.GenInvalid b) => Data.GenValidity.GenInvalid (a, b) instance (Data.GenValidity.GenUnchecked a, Data.GenValidity.GenUnchecked b) => Data.GenValidity.GenUnchecked (Data.Either.Either a b) instance (Data.GenValidity.GenValid a, Data.GenValidity.GenValid b) => Data.GenValidity.GenValid (Data.Either.Either a b) instance (Data.GenValidity.GenInvalid a, Data.GenValidity.GenInvalid b) => Data.GenValidity.GenInvalid (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.GenValid a, Data.GenValidity.GenValid b, Data.GenValidity.GenValid c) => Data.GenValidity.GenValid (a, b, c) instance (Data.GenValidity.GenInvalid a, Data.GenValidity.GenInvalid b, Data.GenValidity.GenInvalid c) => Data.GenValidity.GenInvalid (a, b, c) instance Data.GenValidity.GenUnchecked a => Data.GenValidity.GenUnchecked (GHC.Base.Maybe a) instance Data.GenValidity.GenValid a => Data.GenValidity.GenValid (GHC.Base.Maybe a) instance Data.GenValidity.GenInvalid a => Data.GenValidity.GenInvalid (GHC.Base.Maybe a) instance Data.GenValidity.GenUnchecked a => Data.GenValidity.GenUnchecked [a] instance Data.GenValidity.GenValid a => Data.GenValidity.GenValid [a] instance Data.GenValidity.GenInvalid a => Data.GenValidity.GenInvalid [a] instance Data.GenValidity.GenUnchecked () instance Data.GenValidity.GenValid () instance Data.GenValidity.GenUnchecked GHC.Types.Bool instance Data.GenValidity.GenValid GHC.Types.Bool instance Data.GenValidity.GenUnchecked GHC.Types.Ordering instance Data.GenValidity.GenValid GHC.Types.Ordering instance Data.GenValidity.GenUnchecked GHC.Types.Char instance Data.GenValidity.GenValid GHC.Types.Char instance Data.GenValidity.GenUnchecked GHC.Types.Int instance Data.GenValidity.GenValid GHC.Types.Int instance Data.GenValidity.GenUnchecked GHC.Types.Word instance Data.GenValidity.GenValid GHC.Types.Word instance Data.GenValidity.GenUnchecked GHC.Types.Float instance Data.GenValidity.GenValid GHC.Types.Float instance Data.GenValidity.GenInvalid GHC.Types.Float instance Data.GenValidity.GenUnchecked GHC.Types.Double instance Data.GenValidity.GenValid GHC.Types.Double instance Data.GenValidity.GenInvalid GHC.Types.Double instance Data.GenValidity.GenUnchecked GHC.Integer.Type.Integer instance Data.GenValidity.GenValid GHC.Integer.Type.Integer instance Data.GenValidity.GenUnchecked (GHC.Real.Ratio GHC.Integer.Type.Integer) instance Data.GenValidity.GenValid (GHC.Real.Ratio GHC.Integer.Type.Integer) instance Data.Fixed.HasResolution a => Data.GenValidity.GenUnchecked (Data.Fixed.Fixed a) instance Data.Fixed.HasResolution a => Data.GenValidity.GenValid (Data.Fixed.Fixed a) 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) instance Data.GenValidity.GenUnchecked a => Data.GenValidity.GGenUnchecked (GHC.Generics.K1 i a) module Data.GenRelativeValidity class (GenUnchecked a, RelativeValidity a b) => GenRelativeUnchecked a b where genUncheckedFor _ = genUnchecked genUncheckedFor :: GenRelativeUnchecked a b => b -> Gen a class (GenValid a, RelativeValidity a b) => GenRelativeValid a b where genValidFor b = genValid `suchThat` (`isValidFor` b) genValidFor :: GenRelativeValid a b => b -> Gen a class (GenUnchecked a, RelativeValidity a b, GenRelativeUnchecked a b) => GenRelativeInvalid a b where genInvalidFor b = genUncheckedFor b `suchThat` (not . (`isValidFor` b)) genInvalidFor :: GenRelativeInvalid a b => b -> Gen a