feat: tests for the rendering/parsing
This commit is contained in:
parent
9484d097d4
commit
d012307d19
8 changed files with 104 additions and 45 deletions
|
@ -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]
|
||||
|
26
test/Arbitrary/InvalidBrainfuckText.hs
Normal file
26
test/Arbitrary/InvalidBrainfuckText.hs
Normal 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]
|
||||
|
|
@ -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]]+,]+,.[-][[<],>>++]+"}
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue