summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs
blob: 4d6f6e082fbc860a9776aa7e23782e662a2ac2dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module Minilang.Lambda.ParserSpec where

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
  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))