diff --git a/cw/test/Spec.hs b/cw/test/Spec.hs index 6308a11a9f3d0ea85d44957bdb765358b4b25c71..e6c0ba8c352928f09cafc34bb0802d47af97d912 100644 --- a/cw/test/Spec.hs +++ b/cw/test/Spec.hs @@ -1,7 +1,9 @@ import Challenges +import Data.List main :: IO () -main = challenge1Test +main = challenge2Test + exGrid1'1 = [ "HAGNIRTSH" , "SACAGETAK", "GCSTACKEL","MGHKMILKI","EKNLETGCN","TNIRTLETE","IRAAHCLSR","MAMROSAGD","GIZKDDNRG" ] @@ -19,23 +21,69 @@ exGrid1'3 = ["TEST","ASBD","GDFI","FDGS"] exWords1'3 = ["TEST"] exAns1'3 = [("TEST",Just((0,0),Forward))] -assert1 :: [(String,Maybe Placement)] -> [(String,Maybe Placement)] -> IO () -assert1 result correct | result == correct = do putStrLn ("Testing:") - putStrLn (show correct) - putStrLn "Passed! Result:" - putStrLn (show result) - putStrLn "" - | otherwise = do putStrLn ("Testing:") - putStrLn (show correct) - putStrLn "Failed! Result:" - putStrLn (show result) - putStrLn "" + + +printGrid :: WordSearchGrid -> IO () +printGrid [] = return () +printGrid (w:ws) = do putStrLn $ intersperse ' ' w + printGrid ws + +pPrintList :: Show a => [a] -> IO () +pPrintList cs = do putStr "[" + ppl cs + where + ppl (x:[]) = putStrLn $ " " ++ show x ++ "]\n" + ppl (x:y:[]) = putStrLn $ " " ++ show x ++ "," ++ show y ++ "]\n" + ppl (x:y:z:[]) = putStrLn $ " " ++ show x ++ "," ++ show y ++ "," ++ show z ++ "]\n" + ppl (x:y:z:xs) = do putStrLn $ " " ++ show x ++ "," ++ show y ++ "," ++ show z ++ "," + ppl $ xs + + + +assert1 :: WordSearchGrid -> [ (String,Maybe Placement) ] -> [ (String,Maybe Placement) ] -> IO () +assert1 grid result correct | result == correct = do putStrLn "Testing Grid:\n" + printGrid grid + putStrLn "\nExpected Result:" + pPrintList correct + putStrLn "Passed! Result:" + pPrintList result + | otherwise = do putStrLn "Testing Grid:\n" + printGrid grid + putStrLn "\nExpected Result:" + pPrintList correct + putStrLn "Failed! Result:" + pPrintList result challenge1Test :: IO () challenge1Test = do putStrLn "Challenge 1 Start Test" putStrLn "=========================================" - assert1 (solveWordSearch exWords1'3 exGrid1'3) exAns1'3 - assert1 (solveWordSearch exWords1'1 exGrid1'1) exAns1'1 - assert1 (solveWordSearch exWords1'2 exGrid1'2) exAns1'2 + assert1 exGrid1'1 (solveWordSearch exWords1'1 exGrid1'1) exAns1'1 + assert1 exGrid1'2 (solveWordSearch exWords1'2 exGrid1'2) exAns1'2 + putStrLn "=========================================" + putStrLn "Challenge 1 End Test" + + + +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 answers + putStrLn areWordsPresent + where + areWordsPresent = if foldl1 (||) $ map (\(_,x) -> x == Nothing) answers + then "Not all words present!" + else "All words are present!" + +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 "Challenge 2 Start Test" + putStrLn "=========================================" + (g1,sol1) <- createAndSolve ["WORD","EXAMPLE","SEARCH"] 0.3 + assert2 g1 sol1 putStrLn "=========================================" - putStrLn "Challenge 1 End Test" \ No newline at end of file + putStrLn "Challenge 2 End Test" \ No newline at end of file