summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud@pankzsoft.com>2025-10-17 16:28:26 +0200
committerArnaud Bailly <arnaud@pankzsoft.com>2025-10-17 16:28:26 +0200
commit1de68e897188941559a7f5bdc1314c69581c9208 (patch)
tree51c54b927c3a430642886f38d55fec64761d63ee /lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs
parent7744ba2b397b808a5a82169f3f771f53f5eeaf7d (diff)
downloadlambda-nantes-1de68e897188941559a7f5bdc1314c69581c9208.tar.gz
feat: can parse an identifier as a variable (symbol)
Diffstat (limited to 'lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs')
-rw-r--r--lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs19
1 files changed, 15 insertions, 4 deletions
diff --git a/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs b/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs
index 284c1af..4d6f6e0 100644
--- a/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs
+++ b/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs
@@ -1,9 +1,20 @@
module Minilang.Lambda.ParserSpec where
-import Minilang.Lambda.Parser (AST (..), parse)
-import Test.Hspec (Spec, it, parallel, shouldBe)
+import Data.Text (Text, pack)
+import Minilang.Lambda.Parser (AST (..), initialChars, parse, restChars)
+import Test.Hspec (Spec, parallel, shouldBe)
+import Test.Hspec.QuickCheck (prop)
+import Test.QuickCheck (Arbitrary (..), elements, listOf)
spec :: Spec
spec = parallel $ do
- it "parses a variable" $ do
- parse "x" `shouldBe` Right (Sym "x")
+ prop "parses an identifier as a variable" $ \(Identifier ident) ->
+ parse ident `shouldBe` Right (Sym ident)
+
+newtype Identifier = Identifier Text
+ deriving (Eq, Show)
+
+instance Arbitrary Identifier where
+ arbitrary =
+ Identifier . pack
+ <$> ((:) <$> elements initialChars <*> listOf (elements restChars))