26 lines
932 B
Haskell
26 lines
932 B
Haskell
{-# LANGUAGE InstanceSigs #-}
|
|
{-# LANGUAGE DerivingStrategies #-}
|
|
module Arbitrary.InvalidBrainfuckProgram (InvalidBrainfuckProgram(..)) where
|
|
|
|
import Data.Text (Text)
|
|
import Test.QuickCheck.Gen (Gen)
|
|
import Test.QuickCheck.Arbitrary (Arbitrary (arbitrary))
|
|
|
|
import qualified Data.Text as Text
|
|
import qualified Test.QuickCheck.Gen as Gen
|
|
import qualified Arbitrary.ValidBrainfuckProgram as ValidBrainfuckProgram
|
|
|
|
newtype InvalidBrainfuckProgram = InvalidBrainfuckProgram { get :: Text }
|
|
deriving stock Show
|
|
|
|
instance Arbitrary InvalidBrainfuckProgram where
|
|
arbitrary :: Gen InvalidBrainfuckProgram
|
|
arbitrary = do
|
|
validProgram <- ValidBrainfuckProgram.get <$> arbitrary
|
|
|
|
index <- Gen.choose (0, Text.length validProgram)
|
|
badBrace <- Gen.oneof $ map pure "[]"
|
|
let (prefix, suffix) = Text.splitAt index validProgram
|
|
|
|
pure . InvalidBrainfuckProgram $ Text.concat [prefix, Text.singleton badBrace, suffix]
|
|
|