26 lines
893 B
Haskell
26 lines
893 B
Haskell
{-# LANGUAGE InstanceSigs #-}
|
|
{-# LANGUAGE DerivingStrategies #-}
|
|
module Arbitrary.InvalidBrainfuckText (InvalidBrainfuckText(..)) 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.ValidBrainfuckText as ValidBrainfuckText
|
|
|
|
newtype InvalidBrainfuckText = InvalidBrainfuckText { get :: Text }
|
|
deriving stock Show
|
|
|
|
instance Arbitrary InvalidBrainfuckText where
|
|
arbitrary :: Gen InvalidBrainfuckText
|
|
arbitrary = do
|
|
validText <- ValidBrainfuckText.get <$> arbitrary
|
|
|
|
index <- Gen.choose (0, Text.length validText)
|
|
badBrace <- Gen.oneof $ map pure "[]"
|
|
let (prefix, suffix) = Text.splitAt index validText
|
|
|
|
pure . InvalidBrainfuckText $ Text.concat [prefix, Text.singleton badBrace, suffix]
|
|
|