{-# LANGUAGE TemplateHaskell #-} import Test.QuickCheck.All (quickCheckAll) import System.Exit (exitFailure, exitSuccess) import qualified Data.Either as Either import qualified Language.Brainfuck as Brainfuck import qualified Arbitrary.ValidBrainfuckProgram as ValidBrainfuckProgram import qualified Arbitrary.InvalidBrainfuckProgram as InValidBrainfuckProgram prop_acceptValidPrograms :: ValidBrainfuckProgram.ValidBrainfuckProgram -> Bool prop_acceptValidPrograms = Either.isRight . Brainfuck.parse . ValidBrainfuckProgram.get prop_rejectInvalidPrograms :: InValidBrainfuckProgram.InvalidBrainfuckProgram -> Bool prop_rejectInvalidPrograms = Either.isLeft . Brainfuck.parse . InValidBrainfuckProgram.get return [] -- template haskell guard runQuickCheck :: IO Bool runQuickCheck = $quickCheckAll main :: IO () main = do quickCheckGood <- runQuickCheck if quickCheckGood then exitSuccess else exitFailure