2024-11-14 19:56:33 -08:00
|
|
|
module ExprTests (tests) where
|
2024-11-12 11:32:05 -08:00
|
|
|
|
|
|
|
|
import Expr
|
|
|
|
|
import Test.HUnit
|
|
|
|
|
|
|
|
|
|
inner :: Expr
|
2024-11-14 19:56:33 -08:00
|
|
|
inner = Abs "x" (Var 0 "A") $ App (Var 2 "f") (Var 0 "x")
|
2024-11-12 11:32:05 -08:00
|
|
|
|
|
|
|
|
e1 :: Expr
|
|
|
|
|
e1 = Abs "A" Star inner
|
|
|
|
|
|
|
|
|
|
fFree :: Test
|
|
|
|
|
fFree = TestCase $ assertBool "f free" $ occursFree 0 e1
|
|
|
|
|
|
|
|
|
|
incE1 :: Test
|
|
|
|
|
incE1 =
|
|
|
|
|
TestCase $
|
|
|
|
|
assertEqual
|
|
|
|
|
"incIndices e1"
|
|
|
|
|
( Abs "A" Star $
|
|
|
|
|
Abs "x" (Var 0 "A") $
|
2024-11-14 19:56:33 -08:00
|
|
|
App (Var 3 "f") (Var 0 "x")
|
2024-11-12 11:32:05 -08:00
|
|
|
)
|
|
|
|
|
(incIndices e1)
|
|
|
|
|
|
|
|
|
|
after :: Expr
|
2024-11-14 19:56:33 -08:00
|
|
|
after = Abs "x" (Var 2 "B") $ App (Var 1 "f") (Var 0 "x")
|
2024-11-12 11:32:05 -08:00
|
|
|
|
|
|
|
|
substE1 :: Test
|
|
|
|
|
substE1 =
|
|
|
|
|
TestCase $
|
|
|
|
|
assertEqual
|
|
|
|
|
"e1[A := B]"
|
|
|
|
|
after
|
|
|
|
|
(subst 0 (Var 2 "B") inner)
|
|
|
|
|
|
|
|
|
|
betaNFe1 :: Test
|
|
|
|
|
betaNFe1 =
|
|
|
|
|
TestCase $
|
|
|
|
|
assertEqual
|
|
|
|
|
"e1 B"
|
|
|
|
|
after
|
2024-11-14 19:56:33 -08:00
|
|
|
(betaNF $ App e1 $ Var 2 "B")
|
2024-11-12 11:32:05 -08:00
|
|
|
|
|
|
|
|
tests :: Test
|
|
|
|
|
tests =
|
|
|
|
|
TestList
|
|
|
|
|
[ TestLabel "fFree" fFree
|
|
|
|
|
, TestLabel "incE1" incE1
|
|
|
|
|
, TestLabel "substE1" substE1
|
|
|
|
|
, TestLabel "betaNFe1" betaNFe1
|
|
|
|
|
]
|