module Test.Validity.Shrinking
( shrinkValiditySpec
, shrinkValidSpec
, shrinkInvalidSpec
, shrinkValidPreservesValidOnGenValid
, shrinkInvalidPreservesInvalidOnGenInvalid
, shrinkPreservesValidOnGenValid
, shrinkPreservesInvalidOnGenInvalid
, shrinkValidPreservesValid
, shrinkInvalidPreservesInvalid
, shrinkingStaysValid
, shrinkingStaysInvalid
, shrinkingPreserves
) where
import Data.Data
import Data.GenValidity
import Test.Hspec
import Test.QuickCheck
import Test.Validity.Shrinking.Property
import Test.Validity.Utils
shrinkValiditySpec ::
forall a. (Show a, Typeable a, GenValid a, GenInvalid a)
=> Spec
shrinkValiditySpec = do
shrinkValidSpec @a
shrinkInvalidSpec @a
shrinkValidSpec ::
forall a. (Show a, Typeable a, GenValid a)
=> Spec
shrinkValidSpec =
describe ("shrinkValid :: " ++ nameOf @(a -> [a])) $
it "preserves validity" $ shrinkValidPreservesValidOnGenValid @a
shrinkInvalidSpec ::
forall a. (Show a, Typeable a, GenInvalid a)
=> Spec
shrinkInvalidSpec =
describe ("shrinkInvalid :: " ++ nameOf @(a -> [a])) $
it "preserves invalidity" $ shrinkInvalidPreservesInvalidOnGenInvalid @a
shrinkValidPreservesValidOnGenValid ::
forall a. (Show a, GenValid a)
=> Property
shrinkValidPreservesValidOnGenValid =
shrinkingStaysValid @a genValid shrinkValid
shrinkInvalidPreservesInvalidOnGenInvalid ::
forall a. (Show a, GenInvalid a)
=> Property
shrinkInvalidPreservesInvalidOnGenInvalid =
shrinkingStaysInvalid @a genInvalid shrinkInvalid