copilot-2.0.5: Examples/Test.hs
--------------------------------------------------------------------------------
-- Copyright © 2011 National Institute of Aerospace / Galois, Inc.
--------------------------------------------------------------------------------
-- | A test suite to check for basic functionality.
module Main where
import System.Directory ( removeDirectoryRecursive
, doesDirectoryExist
, doesFileExist
, removeFile )
import qualified Copilot.Compile.C99 as C99
import qualified Copilot.Compile.SBV as SBV
import qualified Copilot.Tools.CBMC as M
import Control.Monad (when, unless)
import Data.Maybe (catMaybes)
import AddMult
import Array
--import BadExtVars
import Cast
import ClockExamples
import EngineExample
import Examples
import Examples2
import ExtFuns
import Languages
import Local
import LTLExamples
import PTLTLExamples
import Random
import RegExpExamples
import Sat
import StackExamples
import StatExamples
import VotingExamples
--------------------------------------------------------------------------------
main :: IO ()
main = do
ls <- checkExists
when (null ls) runTests
unless (null ls) $ do putStrLn "*** Warning! ***"
putStrLn "Cannot run tests in this directory. You have the following files or directories that would be deleted: "
mapM_ putStrLn ls
runTests :: IO ()
runTests = do
cleanup
putStrLn "Testing addMult ..."
addMult >> cleanup
putStrLn ""
putStrLn "Testing array ..."
array >> cleanup
putStrLn ""
-- putStrLn "Testing badExtVars ..."
-- badExtVars >> cleanup
putStrLn ""
putStrLn "Testing castEx ..."
castEx >> cleanup
putStrLn ""
putStrLn "Testing clockExamples ..."
clockExamples >> cleanup
putStrLn ""
putStrLn "Testing engineExample ..."
engineExample >> cleanup
putStrLn ""
putStrLn "Testing examples ..."
examples >> cleanup
putStrLn ""
putStrLn "Testing examples2 ..."
examples2 >> cleanup
putStrLn ""
putStrLn "Testing extFuns ..."
extFuns >> cleanup
putStrLn ""
putStrLn "Testing language ..."
languages >> cleanup
putStrLn ""
putStrLn "Testing localEx ..."
localEx >> cleanup
putStrLn ""
putStrLn "Testing ltlExamples ..."
ltlExamples >> cleanup
putStrLn ""
putStrLn "Testing ptltlExamples ..."
ptltlExamples >> cleanup
putStrLn ""
putStrLn "Testing randomEx ..."
randomEx >> cleanup
putStrLn ""
putStrLn "Testing regExpExamples ..."
regExpExamples >> cleanup
putStrLn ""
putStrLn "Testing satExamples ..."
satExamples >> cleanup
putStrLn ""
putStrLn "Testing stackExamples ..."
stackExamples >> cleanup
putStrLn ""
putStrLn "Testing statExamples ..."
statExamples >> cleanup
putStrLn ""
putStrLn "Testing votingExamples ..."
votingExamples >> cleanup
putStrLn ""
putStrLn ""
putStrLn "************************************"
putStrLn " Ok, the basic tests passed. Enjoy!"
putStrLn "************************************"
--------------------------------------------------------------------------------
cbmcName :: String
cbmcName = "cbmc_driver.c"
atomCBMC :: String
atomCBMC = M.appendPrefix M.atomPrefix C99.c99DirName
sbvCBMC :: String
sbvCBMC = M.appendPrefix M.sbvPrefix SBV.sbvDirName
--------------------------------------------------------------------------------
checkExists :: IO [String]
checkExists = do
b0 <- nmBool doesDirectoryExist SBV.sbvDirName
b1 <- nmBool doesDirectoryExist C99.c99DirName
b2 <- nmBool doesFileExist cbmcName
b3 <- nmBool doesDirectoryExist atomCBMC
b4 <- nmBool doesDirectoryExist sbvCBMC
return $ catMaybes $ map getName [b0, b1, b2, b3, b4]
where
getName (nm, bool) = if bool then Just nm else Nothing
nmBool f nm = do b <- f nm
return (nm, b)
--------------------------------------------------------------------------------
cleanup :: IO ()
cleanup = do
b0 <- doesDirectoryExist SBV.sbvDirName
when b0 (removeDirectoryRecursive SBV.sbvDirName)
b1 <- doesDirectoryExist C99.c99DirName
when b1 (removeDirectoryRecursive C99.c99DirName)
b2 <- doesFileExist cbmcName
when b2 (removeFile cbmcName)
b3 <- doesDirectoryExist atomCBMC
when b3 (removeDirectoryRecursive atomCBMC)
b4 <- doesDirectoryExist sbvCBMC
when b4 (removeDirectoryRecursive sbvCBMC)
--------------------------------------------------------------------------------