diff --git a/cw/test/Spec.hs b/cw/test/Spec.hs index 0c6674d4bf7012288c6280a8da235699577a7303..e0dc388d36b266b213d41e4de9e5ac298494408a 100644 --- a/cw/test/Spec.hs +++ b/cw/test/Spec.hs @@ -51,6 +51,18 @@ ex4'6Ans = Nothing ex4'7Ans = Just (LamDef [ ( "F",LamAbs 1 (LamApp (LamVar 1) (LamVar 1)) ), ( "G",LamAbs 2 (LamVar 2) ) ] (LamApp (LamMacro "F") (LamMacro "G"))) +exId = (LamAbs 1 (LamVar 1)) +ex5'1 = LamDef [] (LamApp (LamVar 1) (LamVar 2)) +ex5'2 = (LamDef [ ("F", exId) ] (LamVar 2) ) +ex5'3 = (LamDef [ ("F", exId) ] (LamMacro "F") ) +ex5'4 = (LamDef [ ("F", exId) ] (LamApp (LamMacro "F") (LamMacro "F")) + +ex5'1Ans = LJust (LamDef [] (LamAbs 3 (LamApp (LamAbs 6 (LamApp (LamVar 6) (LamVar 1))) (LamAbs 4 (LamApp (LamAbs 7 (LamApp (LamVar 7) (LamVar 2))) (LamAbs 5 (LamApp (LamApp (LamVar 4) (LamVar 5)) (LamVar 3)))))))) +ex5'2Ans = (LamDef [ ("F", exId) ] (LamVar 2) ) +ex5'3Ans = (LamDef [ ("F", exId) ] (LamMacro "F") ) +ex5'4Ans = (LamDef [ ("F", exId) ] (LamApp (LamMacro "F") (LamMacro "F"))) + + ------------------------------Printing Functions-------------------------------- @@ -214,4 +226,32 @@ challenge4Test = do putStrLn "=========================================" assert4 ex4'7 ex4'7Ans (parseLamMacro ex4'7) putStrLn "=========================================" putStrLn "Challenge 4 End Test" + putStrLn "=========================================\n" + + +-----------------------------Challenge 5 Testing-------------------------------- + + +assert5 :: LamMacroExpr -> LamMacroExpr -> LamMacroExpr -> IO () +assert5 macro expected result = do putStrLn "CPS Translating:" + putStrLn $ prettyPrint macro ++ "\n" + putStrLn "(Actual Internal Value):" + putStrLn $ show macro ++ "\n" + putStrLn "Expected Result:" + putStrLn $ show expected ++ "\n" + if expected == result then + putStrLn "Passed! Result:" + else + putStrLn "Failed! Result:" + putStrLn $ show result + +challenge5Test :: IO () +challenge5Test = do putStrLn "=========================================" + putStrLn "Challenge 5 Start Test" + putStrLn "=========================================" + assert5 ex5'1 ex5'1Ans (parseLamMacro ex4'1) + putStrLn "\n- - - - - - - - - - - - - - - - - -\n" + + putStrLn "=========================================" + putStrLn "Challenge 5 End Test" putStrLn "=========================================\n" \ No newline at end of file