{- |
module: $Header$
description: OpenTheory QuickCheck interface
license: MIT

maintainer: Joe Leslie-Hurd <joe@gilith.com>
stability: provisional
portability: portable
-}
module OpenTheory.Primitive.Test
  ( assert,
    check )
where

import qualified Test.QuickCheck as QuickCheck

assert :: String -> Bool -> IO ()
assert desc prop =
    do putStr desc
       if prop
         then putStrLn "+++ OK"
         else
           do putStr "**"
              putStrLn "* Failed!"
              error "Assertion failed"

check :: QuickCheck.Testable prop => String -> prop -> IO ()
check desc prop =
    do putStr desc
       res <- QuickCheck.quickCheckWithResult args prop
       case res of
         QuickCheck.Failure {} -> error "Proposition failed"
         _ -> return ()
  where
    args = QuickCheck.stdArgs {QuickCheck.maxSuccess = 100}