-- | -- Module : Test -- Copyright : (c) 2021 Rudy Matela -- License : 3-Clause BSD (see the file LICENSE) -- Maintainer : Rudy Matela -- -- Internal test module for Conjure, -- intended to be imported from all test programs and only by them. module Test ( module Conjure , module Conjure.Expr , module Conjure.Conjurable , module Test.LeanCheck , module Test.LeanCheck.Utils , module Test.ListableExpr , mainTest ) where import System.Exit (exitFailure) import System.Environment (getArgs, getProgName) import Test.LeanCheck import Test.LeanCheck.Utils import Test.ListableExpr import Conjure import Conjure.Expr hiding (delete, insert) import Conjure.Conjurable reportTests :: String -> [Bool] -> IO () reportTests s tests = do case elemIndices False tests of [] -> putStrLn $ s ++ ": tests passed" is -> do putStrLn (s ++ ": failed tests: " ++ show is) exitFailure getMaxTestsFromArgs :: Int -> IO Int getMaxTestsFromArgs n = do as <- getArgs return $ case as of (s:_) -> read s _ -> n mainTest :: (Int -> [Bool]) -> Int -> IO () mainTest tests n' = do pn <- getProgName n <- getMaxTestsFromArgs n' reportTests pn (tests n) printLines :: Show a => [a] -> IO () printLines = putStrLn . unlines . map show