diff --git a/cw/cw.cabal b/cw/cw.cabal index 73459c692f4e41da4e5f3da8de9dd6242f710961..9258ab4b6cc236784b2d2a561a8d232774bfa2c5 100644 --- a/cw/cw.cabal +++ b/cw/cw.cabal @@ -4,7 +4,7 @@ cabal-version: 1.12 -- -- see: https://github.com/sol/hpack -- --- hash: fd3572af2df5b17566ae6c18bb0f88fc92d2e2f57139c9406ef8b0287c0d1985 +-- hash: 0503613ad94bca2a43f614208e4d22e039e61deecda53cfdc17a87e2bd476c90 name: cw version: 0.1.0.0 @@ -56,7 +56,7 @@ executable cw-exe test-suite cw-test type: exitcode-stdio-1.0 - main-is: Spec.hs + main-is: Tests.hs other-modules: Paths_cw hs-source-dirs: diff --git a/cw/package.yaml b/cw/package.yaml index 0654f8eab1f94c4eef00768efbc7e90908bb58d7..8bdf04d285ff0ffd5e444d3be061a6b73a60dd38 100644 --- a/cw/package.yaml +++ b/cw/package.yaml @@ -40,7 +40,7 @@ executables: tests: cw-test: - main: Spec.hs + main: Tests.hs source-dirs: test ghc-options: - -threaded diff --git a/cw/test/Spec.hs b/cw/test/Spec.hs deleted file mode 100644 index e0dc388d36b266b213d41e4de9e5ac298494408a..0000000000000000000000000000000000000000 --- a/cw/test/Spec.hs +++ /dev/null @@ -1,257 +0,0 @@ -import Challenges -import Data.List - - --------------------------------------Examples----------------------------------- - - -exGrid1'1 = [ "HAGNIRTSH" , "SACAGETAK", "GCSTACKEL","MGHKMILKI","EKNLETGCN","TNIRTLETE","IRAAHCLSR","MAMROSAGD","GIZKDDNRG" ] -exWords1'1 = [ "HASKELL","STRING","STACK","MAIN","METHOD"] - -exAns1'1 = [("HASKELL",Just((0,0),DownForward)),("STRING",Just((7,0),Back)),("STACK",Just((2,2),Forward)), - ("MAIN", Just((2,7),Up )),("METHOD",Just((4,3),Down))] - - -exGrid1'2 = ["ROBREUMBR","AURPEPSAN","UNLALMSEE","YGAUNPYYP","NLMNBGENA","NBLEALEOR","ALRYPBBLG","NREPBEBEP","YGAYAROMR"] -exWords1'2 = [ "BANANA", "ORANGE", "MELON", "RASPBERRY","APPLE","PLUM","GRAPE" ] - -exAns1'2 = [("BANANA", Just((5,6),UpBack )),("ORANGE",Just((1,0),DownForward)),("MELON",Just((7,8),Up )), - ("RASPBERRY",Just((8,0),DownBack)),("APPLE", Just((2,8),UpForward )),("PLUM", Just((5,1),DownBack)), - ("GRAPE", Just((8,6),Up ))] - - -ex3'1 = LamDef [] (LamApp (LamAbs 1 (LamVar 1)) (LamAbs 1 (LamVar 1))) -ex3'2 = LamDef [] (LamAbs 1 (LamApp (LamVar 1) (LamAbs 1 (LamVar 1)))) -ex3'3 = LamDef [ ("F",LamAbs 1 (LamVar 1) ) ] (LamAbs 2 (LamApp (LamVar 2) (LamMacro "F"))) -ex3'4 = LamDef [ ("F",LamAbs 1 (LamVar 1) ) ] (LamAbs 2 (LamApp (LamAbs 1 (LamVar 1)) (LamVar 2))) -ex3'5 = LamDef [ ( "F",LamAbs 1 (LamApp (LamVar 1) (LamVar 1)) ), ( "G",LamAbs 2 (LamVar 2) ) ] - (LamApp (LamAbs 1 (LamApp (LamVar 1) (LamVar 1))) (LamAbs 2 (LamVar 2))) - -ex3'1Ans = "(\\x1 -> x1) \\x1 -> x1" -ex3'2Ans = "\\x1 -> x1 \\x1 -> x1" -ex3'3Ans = "def F = \\x1 -> x1 in \\x2 -> x2 F" -ex3'4Ans = "def F = \\x1 -> x1 in \\x2 -> F x2" -ex3'5Ans = "def F = \\x1 -> x1 x1 in def G = \\x2 -> x2 in F G" - - -ex4'1 = "x1 (x2 x3)" -ex4'2 = "x1 x2 F" -ex4'3 = "def F = \\x1-> x1 in \\x2 -> x2 F" -ex4'4 = "def F = \\x1 -> x1 (def G= \\x1 -> x1 in x1) in \\x2 -> x2" -ex4'5 = "def F = \\x1 -> x1 in def F = \\x2 -> x2 x1 in x1" -ex4'6 = "def F = x1 in F" -ex4'7 = "def F = \\x1 -> x1 x1 in def G = \\x2 -> x2 in F G" - -ex4'1Ans = Just (LamDef [] (LamApp (LamVar 1) (LamApp (LamVar 2) (LamVar 3)))) -ex4'2Ans = Just (LamDef [] (LamApp (LamApp (LamVar 1) (LamVar 2)) (LamMacro"F"))) -ex4'3Ans = Just (LamDef [ ("F", LamAbs 1 (LamVar 1) ) ] (LamAbs 2 (LamApp (LamVar 2) (LamMacro "F")))) -ex4'4Ans = Nothing -ex4'5Ans = Nothing -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-------------------------------- - - -printGrid :: WordSearchGrid -> IO () -printGrid [] = return () -printGrid (w:ws) = do putStrLn $ intersperse ' ' w - printGrid ws - -splitEvery :: Int -> [a] -> [[a]] -splitEvery _ [] = [] -splitEvery n list = first : (splitEvery n rest) - where - (first,rest) = splitAt n list - -pPrintList :: Show a => Int -> [a] -> IO () -pPrintList val xs = do putStr "[" - let (first:rest) = splitEvery val xs - putStr $ (init . tail) $ show first - printRest rest - where - printRest :: Show a => [[a]] -> IO () - printRest [] = putStr $ "]\n" - printRest (x:xs) = do putStr $ (++) "\n " $ (init . tail) $ show x - printRest xs - -zipF :: (a -> b) -> [a] -> [(a,b)] -zipF f xs = zip xs $ map f xs - - --------------------------------------Main--------------------------------------- - - -main :: IO () -main = do challenge1Test - challenge2Test - challenge3Test - challenge4Test - - ------------------------------Challenge 1 Testing-------------------------------- - - -assert1 :: WordSearchGrid -> [ (String,Maybe Placement) ] -> [ (String,Maybe Placement) ] -> IO () -assert1 grid result correct = do putStrLn "Testing Grid:\n" - printGrid grid - putStrLn "\nExpected Result:" - pPrintList 3 correct - putStrLn "" - if result == correct then - do putStrLn "Passed! Result:" - pPrintList 3 result - else - do putStrLn "Failed! Result:" - pPrintList 3 result - -challenge1Test :: IO () -challenge1Test = do putStrLn "=========================================" - putStrLn "Challenge 1 Start Test" - putStrLn "=========================================" - assert1 exGrid1'1 (solveWordSearch exWords1'1 exGrid1'1) exAns1'1 - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - assert1 exGrid1'2 (solveWordSearch exWords1'2 exGrid1'2) exAns1'2 - putStrLn "=========================================" - putStrLn "Challenge 1 End Test" - putStrLn "=========================================\n" - - ------------------------------Challenge 2 Testing-------------------------------- - - -assert2 :: WordSearchGrid -> [ (String,Maybe Placement) ] -> IO () -assert2 grid answers = do putStrLn "Checking Grid Contains all Given Words:\n" - printGrid grid - putStrLn "\nWords in Grid:" - pPrintList 3 answers - if foldl1 (||) $ map ((Nothing/=) . snd) answers then - putStrLn "Passed Test! All words are present!" - else - do putStrLn "Failed Test! Not all words are present" - putStrLn "List of found words:" - pPrintList 3 answers - -createAndSolve :: [ String ] -> Double -> IO (WordSearchGrid,[ (String,Maybe Placement) ]) -createAndSolve words maxDensity = do g <- createWordSearch words maxDensity - let soln = solveWordSearch words g - return (g,soln) - -challenge2Test :: IO () -challenge2Test = do putStrLn "=========================================" - putStrLn "Challenge 2 Start Test" - putStrLn "=========================================" - (g1,sol1) <- createAndSolve ["WORD","EXAMPLE","SEARCH"] 0.3 - assert2 g1 sol1 - putStrLn "=========================================" - putStrLn "Challenge 2 End Test" - putStrLn "=========================================\n" - - ------------------------------Challenge 3 Testing-------------------------------- - - -assert3 :: LamMacroExpr -> String -> String -> IO () -assert3 macro expected result = do putStrLn "Pretty Printing:" - putStrLn $ show macro ++ "\n" - putStrLn "Expected Result:" - putStrLn $ expected ++ "\n" - if expected == result then - putStrLn "Passed! Result:" - else - putStrLn "Failed! Result:" - putStrLn result - -challenge3Test :: IO () -challenge3Test = do putStrLn "=========================================" - putStrLn "Challenge 3 Start Test" - putStrLn "=========================================" - assert3 ex3'1 ex3'1Ans (prettyPrint ex3'1) - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - assert3 ex3'2 ex3'2Ans (prettyPrint ex3'2) - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - assert3 ex3'3 ex3'3Ans (prettyPrint ex3'3) - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - assert3 ex3'4 ex3'4Ans (prettyPrint ex3'4) - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - assert3 ex3'5 ex3'5Ans (prettyPrint ex3'5) - putStrLn "=========================================" - putStrLn "Challenge 3 End Test" - putStrLn "=========================================\n" - - ------------------------------Challenge 4 Testing-------------------------------- - - -assert4 :: String -> Maybe LamMacroExpr -> Maybe LamMacroExpr -> IO () -assert4 macro expected result = do putStrLn "Parsing:" - putStrLn $ macro ++ "\n" - putStrLn "Expected Result:" - putStrLn $ show expected ++ "\n" - if expected == result then - putStrLn "Passed! Result:" - else - putStrLn "Failed! Result:" - putStrLn $ show result - -challenge4Test :: IO () -challenge4Test = do putStrLn "=========================================" - putStrLn "Challenge 4 Start Test" - putStrLn "=========================================" - assert4 ex4'1 ex4'1Ans (parseLamMacro ex4'1) - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - assert4 ex4'2 ex4'2Ans (parseLamMacro ex4'2) - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - assert4 ex4'3 ex4'3Ans (parseLamMacro ex4'3) - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - assert4 ex4'4 ex4'4Ans (parseLamMacro ex4'4) - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - assert4 ex4'5 ex4'5Ans (parseLamMacro ex4'5) - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - assert4 ex4'6 ex4'6Ans (parseLamMacro ex4'6) - putStrLn "\n- - - - - - - - - - - - - - - - - -\n" - 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