{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Test.Validity.Shrinking.Property
( shrinkPreservesValidOnGenValid
, shrinkPreservesInvalidOnGenInvalid
, shrinkValidPreservesValid
, shrinkInvalidPreservesInvalid
, shrinkingStaysValid
, shrinkingStaysValidWithLimit
, shrinkingStaysInvalid
, shrinkingPreserves
) where
import Data.GenValidity
import Test.QuickCheck
shrinkPreservesValidOnGenValid ::
forall a. (Show a, GenValid a)
=> (a -> [a])
-> Property
shrinkPreservesValidOnGenValid = shrinkingStaysValid genValid
shrinkPreservesInvalidOnGenInvalid ::
forall a. (Show a, GenInvalid a)
=> (a -> [a])
-> Property
shrinkPreservesInvalidOnGenInvalid = shrinkingStaysValid genInvalid
shrinkValidPreservesValid ::
forall a. (Show a, GenValid a)
=> Gen a
-> Property
shrinkValidPreservesValid gen = shrinkingStaysValid gen shrinkValid
shrinkInvalidPreservesInvalid ::
forall a. (Show a, GenInvalid a)
=> Gen a
-> Property
shrinkInvalidPreservesInvalid gen = shrinkingStaysValid gen shrinkInvalid
shrinkingStaysValid ::
forall a. (Show a, Validity a)
=> Gen a
-> (a -> [a])
-> Property
shrinkingStaysValid gen s = shrinkingPreserves gen s isValid
shrinkingStaysValidWithLimit ::
forall a. (Show a, Validity a)
=> Gen a
-> (a -> [a])
-> Int
-> Property
shrinkingStaysValidWithLimit gen s l =
shrinkingPreservesWithLimit gen s l isValid
shrinkingStaysInvalid ::
forall a. (Show a, Validity a)
=> Gen a
-> (a -> [a])
-> Property
shrinkingStaysInvalid gen s = shrinkingPreserves gen s isInvalid
shrinkingPreserves ::
forall a. Show a
=> Gen a
-> (a -> [a])
-> (a -> Bool)
-> Property
shrinkingPreserves gen s p = forAll gen $ \d -> not (p d) || all p (s d)
shrinkingPreservesWithLimit ::
forall a. Show a
=> Gen a
-> (a -> [a])
-> Int
-> (a -> Bool)
-> Property
shrinkingPreservesWithLimit gen s l p =
forAll gen $ \d -> not (p d) || all p (take l $ s d)