{-# LANGUAGE TemplateHaskell #-} import Data.Vector (Vector) import Test.QuickCheck.All (quickCheckAll) import System.Exit (exitFailure, exitSuccess) import Language.Brainfuck.Instruction (Instruction) import qualified Data.Either as Either import qualified Language.Brainfuck as Brainfuck import qualified Arbitrary.ValidBrainfuckText as ValidBrainfuckText import qualified Arbitrary.InvalidBrainfuckText as InValidBrainfuckText prop_acceptValidTexts :: ValidBrainfuckText.ValidBrainfuckText -> Bool prop_acceptValidTexts = Either.isRight . Brainfuck.parse . ValidBrainfuckText.get prop_rejectInvalidTexts :: InValidBrainfuckText.InvalidBrainfuckText -> Bool prop_rejectInvalidTexts = Either.isLeft . Brainfuck.parse . InValidBrainfuckText.get prop_renderParseInverse :: Vector Instruction -> Bool prop_renderParseInverse source = Right source == (Brainfuck.parse . Brainfuck.render $ source) return [] -- template haskell guard runQuickCheck :: IO Bool runQuickCheck = $quickCheckAll main :: IO () main = do quickCheckGood <- runQuickCheck if quickCheckGood then exitSuccess else exitFailure