clash-prelude-1.4.0: tests/Test/QuickCheck/Extra.hs
module Test.QuickCheck.Extra
( expectException
, expectXException
, expectExceptionNoX
) where
import Test.Tasty.QuickCheck
import Control.DeepSeq (NFData)
import Control.Exception (SomeException, try, evaluate)
import Data.Either (isLeft)
import Clash.XException (XException)
-- | Succeed if evaluating leads to an XException
expectXException :: (Show a, NFData a) => a -> Property
expectXException a0 = ioProperty $ do
a1 <- try @XException (evaluate a0)
pure $
counterexample
("Expected Exception, got: " <> show a1)
(isLeft a1)
-- | Succeed if evaluating leads to an Exception
expectException :: (Show a, NFData a) => a -> Property
expectException a0 = ioProperty $ do
a1 <- try @SomeException (evaluate a0)
pure $
counterexample
("Expected Exception, got: " <> show a1)
(isLeft a1)
-- | Succeed if evaluating leads to a non-XException Exception
expectExceptionNoX :: (Show a, NFData a) => a -> Property
expectExceptionNoX a0 = ioProperty $ do
a1 <- try @SomeException (try @XException (evaluate a0))
pure $
counterexample
("Expected non-XException Exception, got: " <> show a1)
(isLeft a1)