packages feed

hakaru-0.4.0: haskell/Tests/TestSuite.hs

-- module Tests.TestSuite(main) where

import System.Exit (exitFailure)
import System.Environment (lookupEnv)

import qualified Tests.ASTTransforms as TR
import qualified Tests.Parser        as P
import qualified Tests.Pretty        as Pr
import qualified Tests.TypeCheck     as TC
import qualified Tests.Simplify      as S
import qualified Tests.Disintegrate  as D
import qualified Tests.Sample        as E
import qualified Tests.RoundTrip     as RT

import Test.HUnit

-- master test suite

ignored :: Assertion
ignored = putStrLn "Warning: maple tests will be ignored"

simplifyTests :: Test -> Maybe String -> Test
simplifyTests t env =
  case env of
    Just _  -> t
    Nothing -> test ignored

allTests :: Maybe String -> Test
allTests env = test
  [ TestLabel "Parser"       P.allTests
  , TestLabel "Pretty"       Pr.allTests
  , TestLabel "TypeCheck"    TC.allTests
  , TestLabel "Simplify"     (simplifyTests S.allTests env)
  , TestLabel "Disintegrate" D.allTests
  , TestLabel "Evaluate"     E.allTests
  , TestLabel "RoundTrip"    (simplifyTests RT.allTests env)
  , TestLabel "ASTTransforms" TR.allTests
  ]

main :: IO ()
main = mainWith (fmap Just . runTestTT)

mainWith :: (Test -> IO (Maybe Counts)) -> IO ()
mainWith run = do
    env <- lookupEnv "LOCAL_MAPLE"
    run (allTests env) >>=
      maybe (return ()) (\(Counts _ _ e f) -> if (e>0) || (f>0) then exitFailure else return ())

-- maini = mainWith