module Main (main) where import qualified Data.CaseInsensitive as CI import qualified Data.Map as Map import qualified Data.Text as Text import System.IO (stderr, stdout) import System.IO.Silently (hSilence) import Test.Tasty import Test.Tasty.ExpectedFailure import Test.Tasty.HUnit import Copilot.Verifier (Verbosity(..)) import Copilot.Verifier.Examples (shouldFailExamples, shouldPassExamples) main :: IO () main = defaultMain $ testGroup "copilot-verifier-examples tests" [ testGroup "should-fail tests" $ -- Why use hSilence for the should-fail tests when we are passing -- Quiet? It's because crux-llvm errors are logged at the highest -- severity possible, and even Crux's quietMode isn't enough to -- suppress those messages. We could try messing with things on the -- Crux side to avoid this, but it's simpler just to use hSilence here. -- After all, we don't really care about the output of failing tests -- anyway, just their exit codes. map (\(name, action) -> expectFail (testCase (Text.unpack (CI.original name)) (hSilence [stderr, stdout] action))) (Map.toAscList (shouldFailExamples Quiet)) , testGroup "should-pass tests" $ map (\(name, action) -> testCase (Text.unpack (CI.original name)) action) (Map.toAscList (shouldPassExamples Quiet)) ]