19 lines
689 B
Haskell
19 lines
689 B
Haskell
module EvaluationSpec (spec) where
|
|
|
|
import Evaluation (subst)
|
|
import Parser (Expr (Abstraction, Application, Variable))
|
|
import Test.Hspec
|
|
|
|
spec :: Spec
|
|
spec = do
|
|
describe "subst" $ do
|
|
it "cannot substitute mismatched variables" $
|
|
subst (Variable "x") "y" (Variable "z") `shouldBe` Variable "x"
|
|
it "can substitute matched variables" $
|
|
subst (Variable "x") "x" (Variable "z") `shouldBe` Variable "z"
|
|
it "can substitute nested variables" $
|
|
subst absWithZ "z" absI `shouldNotBe` absWithZMaker absI
|
|
where
|
|
absWithZMaker z = Abstraction "x" (Application z (Variable "x"))
|
|
absWithZ = absWithZMaker (Variable "z")
|
|
absI = Abstraction "i" (Variable "i")
|