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