comblang/test/Test.hs

52 lines
1.8 KiB
Haskell

{-# LANGUAGE TemplateHaskell #-}
module Test (tests) where
import CombParse
import Distribution.TestSuite (Progress (Finished), Result (Error, Fail, Pass), Test (Group, Test))
import Test.TemplateStuff (mkSimpleCheck)
mkSimpleCheck "checkStr" 'parseVal "\"Str\"" [p|Str "Str"|] "parse a Str"
mkSimpleCheck "checkNumb" 'parseVal "69420" [p|Numb 69420|] "parse a Numb"
mkSimpleCheck "checkId" 'parseVal "x" [p|Id "x"|] "parse an Id"
mkSimpleCheck "checkI" 'parseExpr "I x" [p|Comb (Var (Id "I")) (Var (Id "x"))|] "parse \"I x\""
mkSimpleCheck "checkK" 'parseExpr "K x y" [p|Comb (Comb (Var (Id "K")) (Var (Id "x"))) (Var (Id "y"))|] "parse \"K x y\""
mkSimpleCheck "checkS" 'parseExpr "S x y" [p|Comb (Comb (Var (Id "S")) (Var (Id "x"))) (Var (Id "y"))|] "parse \"S x y\""
mkSimpleCheck "checkIimpl" 'parseExpr "S K x" [p|Comb (Comb (Var (Id "S")) (Var (Id "K"))) (Var (Id "x"))|] "parse \"S K x\""
mkSimpleCheck "checkMimpl" 'parseExpr "S I I" [p|Comb (Comb (Var (Id "S")) (Var (Id "I"))) (Var (Id "I"))|] "parse \"S I I\""
mkSimpleCheck "checkNOTimpl" 'parseExpr "S (S I (K F)) (K T) b" [p|(Comb (Comb (Comb (Var (Id "S")) (Comb (Comb (Var (Id "S")) (Var (Id "I"))) (Comb (Var (Id "K")) (Var (Id "F"))))) (Comb (Var (Id "K")) (Var (Id "T")))) (Var (Id "b")))|] "parse \"S I I\""
tests :: IO [Test]
tests =
return
[ Group
"value"
False
( map
Test
[ checkStr,
checkNumb,
checkId
]
),
Group
"Comb"
False
( map
Test
[ checkI,
checkK,
checkS
]
),
Group
"complex"
False
( map
Test
[ checkIimpl,
checkMimpl,
checkNOTimpl
]
)
]