module Tool (
prop,
eq,
eqShow,
) where
-- import Control.Exception (try)
import Distribution.TestSuite
(Test (Test), TestInstance (TestInstance),
Result (Pass, Fail), Progress (Finished))
noOption :: String -> IO Progress -> Test
noOption name p = Test this where
this = TestInstance p name [] [] (\_ _ -> Right this)
simple :: String -> IO Result -> Test
simple name = noOption name . fmap Finished
boolResult :: Bool -> String -> Result
boolResult b msg
| b = Pass
| otherwise = Fail msg
prop :: String -> Bool -> String -> Test
prop name b = simple name . return . boolResult b
eq :: Eq b => String -> (a -> b) -> a -> b -> String -> Test
eq name t x est = prop name (t x == est)
eqShow :: Show a => String -> a -> String -> Test
eqShow name x est =
eq name show x est $ unwords [show x, "/=", est]
{-
boolIoResult :: IO Bool -> String -> IO Result
boolIoResult iob msg = do
eb <- try iob
return $ case eb :: Either IOError Bool of
Right True -> Pass
Right False -> Fail msg
Left e -> Error $ show e
propIO :: String -> IO Bool -> String -> Test
propIO name iob = simple name . boolIoResult iob
-}