strict-mvar-1.2.0.0: test/Test/Utils.hs
{-# LANGUAGE RankNTypes #-}
module Test.Utils
( runSimGen
, monadicSim
) where
import Control.Monad.IOSim (IOSim, runSimOrThrow)
import Test.QuickCheck (Gen, Property, Testable (..))
import Test.QuickCheck.Gen.Unsafe (Capture (..), capture)
import Test.QuickCheck.Monadic (PropertyM, monadic')
{-------------------------------------------------------------------------------
Property runners (copied from "Ouroboros.Network.Testing.QuickCheck")
-------------------------------------------------------------------------------}
runSimGen :: (forall s. Gen (IOSim s a)) -> Gen a
runSimGen f = do
Capture eval <- capture
return $ runSimOrThrow (eval f)
monadicSim :: Testable a => (forall s. PropertyM (IOSim s) a) -> Property
monadicSim m = property (runSimGen (monadic' m))