import Control.Monad
import System.Environment
import Text.Printf
import Driver
import Pure
import ST
main :: IO ()
main = do
args <- getArgs
let n = if null args then 100 else read (head args)
(results, passed) <- liftM unzip $
foldM ( \prev (name,subtests) -> do
printf "\n%s\n" name
printf "%s\n" $ replicate (length name) '-'
cur <- mapM (\(s,a) -> printf "%-30s: " s >> a n) subtests
return (prev ++ cur)
)
[]
tests
printf "\nPassed %d tests!\n\n" (sum passed)
when (not . and $ results) $ fail "\nNot all tests passed!"
where
tests = [ ("Permute" , tests_Permute)
, ("STPermute" , tests_STPermute)
]