52 lines
1.8 KiB
Haskell
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
|
|
]
|
|
)
|
|
]
|