{-# LANGUAGE LambdaCase #-}
-- module Main where
import Language.Haskell.Interpreter
import System.Environment
import System.Exit
import System.IO
import Test.Target
import Text.Printf
main :: IO ()
main = do
[src, binder] <- getArgs
r <- runInterpreter $ do
loadModules [src]
mods <- getLoadedModules
-- liftIO $ print mods
setImportsQ $ map (\m -> (m,Nothing)) mods
++ [("Test.Target", Nothing), ("Prelude", Nothing)]
set [languageExtensions := [TemplateHaskell]]
let expr = printf "$(targetResultTH '%s \"%s\")" binder src
-- liftIO $ putStrLn expr
interpret expr (as :: IO Result)
case r of
Left e -> hPrint stderr e >> exitWith (ExitFailure 2)
Right x -> x >>= \case
Errored e -> hPutStrLn stderr e >> exitWith (ExitFailure 2)
Failed s -> printf "Found counter-example: %s\n" s >> exitWith (ExitFailure 1)
Passed n -> printf "OK! Passed %d tests.\n" n >> exitSuccess