hoogle-4.2.30: src/Test/General.hs
module Test.General(parseTest, (===), randCheck) where
import Control.Monad
import qualified Data.ByteString as BS
import Test.QuickCheck(Arbitrary(..), quickCheckWithResult, stdArgs, Testable, Result(..))
instance Arbitrary BS.ByteString where
arbitrary = fmap BS.pack arbitrary
parseTest :: (Show a, Show e, Eq a) => (String -> Either e a) -> String -> a -> IO ()
parseTest f input output =
case f input of
Left x -> err "Parse failed" (show x)
Right x -> when (x /= output) $ err "Parse not equal" (show x)
where
err pre post = error $ pre ++ ":\n " ++ input ++ "\n " ++ show output ++ "\n " ++ post
(===) :: (Show a, Eq a) => a -> a -> IO ()
a === b = when (a /= b) $ error $ "Expected: " ++ show a ++ "\nGot: " ++ show b
randCheck :: Testable a => a -> IO ()
randCheck p = do
res <- quickCheckWithResult stdArgs p
let bad = case res of Failure{} -> True; GaveUp{} -> True; _ -> False
when bad $ error "QuickCheck failed"