module Test.Validity.GenValidity
( genValiditySpec
, genValidSpec
, genInvalidSpec
, genValidGeneratesValid
, genGeneratesValid
, genInvalidGeneratesInvalid
, genGeneratesInvalid
) where
import Data.Data
import Data.GenValidity
import Test.Hspec
import Test.QuickCheck
import Test.Validity.Utils
genValiditySpec
:: forall a.
(Typeable a, Show a, GenValid a, GenInvalid a)
=> Spec
genValiditySpec = do
genValidSpec @a
genInvalidSpec @a
genValidSpec
:: forall a.
(Typeable a, Show a, GenValid a)
=> Spec
genValidSpec =
parallel $ do
let name = nameOf @a
describe ("GenValid " ++ name) $ do
describe ("genValid :: Gen " ++ name) $
it ("only generates valid \'" ++ name ++ "\'s") $
genValidGeneratesValid @a
genInvalidSpec
:: forall a.
(Typeable a, Show a, GenInvalid a)
=> Spec
genInvalidSpec =
parallel $ do
let name = nameOf @a
describe ("GenInvalid " ++ name) $ do
describe ("genInvalid :: Gen " ++ name) $
it ("only generates invalid \'" ++ name ++ "\'s") $
genInvalidGeneratesInvalid @a
genValidGeneratesValid
:: forall a.
(Show a, GenValid a)
=> Property
genValidGeneratesValid = genGeneratesValid @a genValid
genGeneratesValid
:: forall a.
(Show a, Validity a)
=> Gen a -> Property
genGeneratesValid gen = forAll gen (`shouldSatisfy` isValid)
genInvalidGeneratesInvalid
:: forall a.
(Show a, GenInvalid a)
=> Property
genInvalidGeneratesInvalid = genGeneratesInvalid @a genInvalid
genGeneratesInvalid
:: forall a.
(Show a, Validity a)
=> Gen a -> Property
genGeneratesInvalid gen = forAll gen (`shouldNotSatisfy` isValid)