packages feed

Yampa-core-0.2.0: tests/testAFRPMain.hs

{- $Id: testAFRPMain.hs,v 1.9 2003/11/10 21:28:58 antony Exp $
******************************************************************************
*                                  A F R P                                   *
*                                                                            *
*       Module:         testAFRPMain                                         *
*       Purpose:        Main driver routine for running tests.               *
*	Authors:	Henrik Nilsson and Antony Courtney		     *
*                                                                            *
*             Copyright (c) Yale University, 2003                            *
*                                                                            *
******************************************************************************
-}
module Main where

import AFRPTests

import System.IO
import System.Environment (getArgs, getProgName)

-- main = runTests
-- main = runSpaceTests

data TestFlags = TestFlags { tReg :: Bool -- run regression tests
			   , tSpace :: Bool -- run space tests
			   , tHelp :: Bool -- print usage and exit
			     }

defFlags = TestFlags { tReg = False, tSpace = False, tHelp = False}
allFlags = TestFlags { tReg = True, tSpace = True, tHelp = False}

parseArgs :: TestFlags -> [String] -> Either TestFlags String
parseArgs flags [] = Left flags
parseArgs flags (arg:args) =
  case arg of
    "-r" -> parseArgs (flags {tReg = True}) args
    "-s" -> parseArgs (flags {tSpace = True}) args
    "-h" -> parseArgs (flags {tHelp = True}) args
    _ -> Right ("invalid argument: " ++ arg)

usage :: String -> Maybe String -> IO ()
usage pname mbEmsg = do
  case mbEmsg of
    (Just emsg) -> hPutStrLn stderr (pname ++ ": " ++ emsg)
    _ -> return ()
  hPutStrLn stderr ("usage: " ++ pname ++ " [-r] [-s] [-h]")
  hPutStrLn stderr "\t-s run space tests"
  hPutStrLn stderr "\t-r run regression tests"
  hPutStrLn stderr "\t-h print this help message"
  hPutStrLn stderr "(no arguments runs all tests.)"

main :: IO ()
main = do
  pname <- getProgName
  args <- getArgs
  let eFlags = if (length args) < 1 
                 then (Left allFlags)
                 else parseArgs defFlags args
  case eFlags of
    (Left tFlags) ->  
      if (tHelp tFlags)
        then usage pname Nothing
        else do
          if (tReg tFlags)
            then runRegTests
            else return ()
          if (tSpace tFlags)
            then runSpaceTests
            else return ()
    (Right emsg) -> usage pname (Just emsg)