Skip to content
Snippets Groups Projects
Commit 5378302d authored by ik1g19's avatar ik1g19
Browse files

renamed test file and rearranged

parent 55a2c72c
No related branches found
No related tags found
No related merge requests found
......@@ -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:
......
......@@ -40,7 +40,7 @@ executables:
tests:
cw-test:
main: Spec.hs
main: Tests.hs
source-dirs: test
ghc-options:
- -threaded
......
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment