import Control.Monad import System.Environment import Text.Printf import Driver import Choose import Permute import STChoose import STPermute main :: IO () main = do args <- getArgs let n = if null args then 100 else read (head args) (smokeResults, smokePassed) <- 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 1) subtests return (prev ++ cur) ) [] smoke (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 $ smokePassed ++ passed) when (not . and $ smokeResults ++ results) $ fail "\nNot all tests passed!" where smoke = [ ("STChoose" , smoke_STChoose) , ("STPermute", smoke_STPermute) ] tests = [ ("STChoose" , tests_Choose) , ("STChoose" , tests_STChoose) , ("Permute" , tests_Permute) , ("STPermute" , tests_STPermute) ]