feat: tests for the rendering/parsing

This commit is contained in:
vegowotenks 2025-06-20 09:26:11 +02:00
parent 9484d097d4
commit d012307d19
8 changed files with 104 additions and 45 deletions

View file

@ -1,26 +0,0 @@
{-# 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]

View file

@ -0,0 +1,26 @@
{-# 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]

View file

@ -1,6 +1,6 @@
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE DerivingStrategies #-}
module Arbitrary.ValidBrainfuckProgram (ValidBrainfuckProgram(..)) where
module Arbitrary.ValidBrainfuckText (ValidBrainfuckText(..)) where
import Data.Text (Text)
import Test.QuickCheck.Arbitrary (Arbitrary (arbitrary))
import Test.QuickCheck.Gen (Gen, sized, frequency, oneof, resize)
@ -8,11 +8,11 @@ import Data.Coerce (coerce)
import qualified Data.Text as Text
newtype ValidBrainfuckProgram = ValidBrainfuckProgram { get :: Text }
newtype ValidBrainfuckText = ValidBrainfuckText { get :: Text }
deriving stock Show
instance Arbitrary ValidBrainfuckProgram where
arbitrary :: Gen ValidBrainfuckProgram
instance Arbitrary ValidBrainfuckText where
arbitrary :: Gen ValidBrainfuckText
arbitrary = coerce . fmap Text.pack $ character []
where
character rest = do
@ -42,6 +42,7 @@ instance Arbitrary ValidBrainfuckProgram where
pure $ commentChar : rest
-- >>> import Test.QuickCheck.Gen (generate)
-- >>> generate $ (arbitrary :: Gen ValidBrainfuckProgram)
-- ValidBrainfuckProgram {get = "<-"}
-- >>> generate $ (arbitrary :: Gen ValidBrainfuckText)
-- ValidBrainfuckText {get = "<[><]>[>],>+,[.-K.]+.>[<],z[p[[<]]+<],<[+]+[P[+][[e]]+,]+,.[-][[<],>>++]+"}