module Data.Array.Accelerate.Examples.Internal.TestFramework (
Test, runTests,
Property, testProperty, testGroup, (~=?), (~?=),
Assertion, testCase, assertEqual,
module Data.Array.Accelerate.Examples.Internal.Similar,
) where
import Data.Array.Accelerate.Examples.Internal.ParseArgs
import Data.Array.Accelerate.Examples.Internal.Similar
import Data.Label
import Control.Monad
import Control.Exception
import System.Exit
import System.Environment
import Test.Framework
import Test.HUnit ( Assertion, assertFailure )
import Test.QuickCheck ( Property, counterexample, ioProperty )
import Test.Framework.Providers.HUnit ( testCase )
import Test.Framework.Providers.QuickCheck2 ( testProperty )
runTests :: Options -> [String] -> [Test] -> IO ()
runTests opts argv tests
= when (get optTest opts)
$ withArgs argv
$ do
putStrLn "running tests..."
defaultMainWithOpts tests (get optTestFramework opts)
`catch` \e -> case e of
ExitSuccess -> putStrLn ""
_ -> throwIO e
failure :: Show a => a -> a -> String
failure expected actual =
unlines [ "*** Expected:", show expected
, "*** Received:", show actual ]
assertEqual
:: (Similar a, Show a)
=> a
-> a
-> Assertion
assertEqual expected actual =
unless (expected ~= actual)
(assertFailure (failure expected actual))
infix 1 ~=?, ~?=
(~=?) :: (Similar a, Show a) => a -> a -> Property
expected ~=? actual =
ioProperty $ do
actual' <- evaluate actual
return $! counterexample (failure expected actual') (expected ~= actual')
(~?=) :: (Similar a, Show a) => a -> a -> Property
(~?=) = flip (~=?)