test-monad-laws-0.0.0.0: src/Test/Monad/State/Checkers.hs
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Test.Monad.State.Checkers where
import Control.Monad.State
import Test.QuickCheck (Property)
import Test.QuickCheck.HigherOrder (Constructible, TestEq, ok, ko)
import Test.Monad.Instances ()
import Test.Monad.State
import Test.Monad.State.Mutants
checkState
:: forall m s
. ( MonadState s m
, Constructible s, TestEq (m ()), TestEq (m s))
=> [(String, Property)]
checkState =
[ ok "get-get" (get_get @m)
, ok "get-put" (get_put @m)
, ok "put-get" (put_get @m)
, ok "put-put" (put_put @m)
]
checkState_ :: [(String, Property)]
checkState_ = checkState @(State Int)
checkState' :: [(String, Property)]
checkState' =
[ ko "bad-get-put-get" (bad_get_put_get @(State Int))
, ko "bad-put-put" (bad_put_put @(State Int))
, ko "mut-put-get" (put_get @(MutantState Int))
, ok "mut-bad-get-put-get" (bad_get_put_get @(MutantState Int))
, ok "mut-bad-put-put" (bad_put_put @(MutantState Int))
]