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