Skip to content
Snippets Groups Projects
Commit 5af70b30 authored by ik1g19's avatar ik1g19
Browse files

renamed test file

parent 5378302d
No related branches found
No related tags found
No related merge requests found
import Challenges
import Data.List
-------------------------------------Main---------------------------------------
main :: IO ()
main = do challenge1Test
challenge2Test
challenge3Test
challenge4Test
challenge5Test
challenge6Test
-----------------------------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 toTest expected result = do putStrLn "CPS Translating:"
putStrLn $ prettyPrint toTest ++ "\n"
putStrLn "(Actual Internal Value):"
putStrLn $ show toTest ++ "\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 (cpsTransform ex5'1)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert5 ex5'2 ex5'2Ans (cpsTransform ex5'2)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert5 ex5'3 ex5'3Ans (cpsTransform ex5'3)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
assert5 ex5'4 ex5'4Ans (cpsTransform ex5'4)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
putStrLn "========================================="
putStrLn "Challenge 5 End Test"
putStrLn "=========================================\n"
-----------------------------Challenge 6 Testing--------------------------------
assert6Inner :: LamMacroExpr -> Maybe LamMacroExpr -> Maybe LamMacroExpr -> IO ()
assert6Inner toTest expected result = do putStrLn "Testing Inner one step Reduction of:"
putStrLn $ prettyPrint toTest ++ "\n"
putStrLn "(Actual Internal Value):"
putStrLn $ show toTest ++ "\n"
putStrLn "Expected Result:"
putStrLn $ show expected ++ "\n"
if expected == result then
putStrLn "Passed! Result:"
else
putStrLn "Failed! Result:"
putStrLn $ show result
assert6Outer :: LamMacroExpr -> Maybe LamMacroExpr -> Maybe LamMacroExpr -> IO ()
assert6Outer toTest expected result = do putStrLn "Testing Outer one step Reduction of:"
putStrLn $ prettyPrint toTest ++ "\n"
putStrLn "(Actual Internal Value):"
putStrLn $ show toTest ++ "\n"
putStrLn "Expected Result:"
putStrLn $ show expected ++ "\n"
if expected == result then
putStrLn "Passed! Result:"
else
putStrLn "Failed! Result:"
putStrLn $ show result
assert6Compare :: LamMacroExpr -> Int -> (Maybe Int,Maybe Int,Maybe Int,Maybe Int) -> (Maybe Int,Maybe Int,Maybe Int,Maybe Int) -> IO ()
assert6Compare toTest bound expected result = do putStrLn "Testing Comparisons of Reductions of:"
putStrLn $ prettyPrint toTest ++ "\n"
putStrLn $ "For a Bound of:" ++ show bound ++ "\n"
putStrLn "(Actual Internal Value):"
putStrLn $ show toTest ++ "\n"
putStrLn "Expected Result:"
putStrLn $ show expected ++ "\n"
if expected == result then
putStrLn "Passed! Result:"
else
putStrLn "Failed! Result:"
putStrLn $ show result
challenge6Test :: IO ()
challenge6Test = do putStrLn "========================================="
putStrLn "Challenge 6 Start Test"
putStrLn "=========================================\n"
-- putStrLn "\n- - - - - - - - - - - - - - - - - -"
-- putStrLn "Testing Inner Reduction"
-- putStrLn "- - - - - - - - - - - - - - - - - -\n"
-- assert6Inner ex5'1 ex5'1Ans (cpsTransform ex5'1)
-- putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
-- putStrLn "\n- - - - - - - - - - - - - - - - - -"
-- putStrLn "Testing Outer Reduction"
-- putStrLn "- - - - - - - - - - - - - - - - - -\n"
putStrLn "\n- - - - - - - - - - - - - - - - - -"
putStrLn "Testing Comparisons of Reductions"
putStrLn "- - - - - - - - - - - - - - - - - -\n"
assert6Compare ex6'1 10 ex6'1Ans (compareInnerOuter ex6'1 10)
putStrLn "\n- - - - - - - - - - - - - - - - - -\n"
putStrLn "========================================="
putStrLn "Challenge 6 End Test"
putStrLn "=========================================\n"
------------------------------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
-------------------------------------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 = 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",LamAbs 3 (LamApp (LamVar 3) (LamAbs 1 (LamAbs 4 (LamApp (LamVar 4) (LamVar 1))))))] (LamAbs 5 (LamApp (LamVar 5) (LamVar 2)))
ex5'3Ans = LamDef [("F",LamAbs 2 (LamApp (LamVar 2) (LamAbs 1 (LamAbs 3 (LamApp (LamVar 3) (LamVar 1))))))] (LamMacro "F")
ex5'4Ans = LamDef [("F",LamAbs 2 (LamApp (LamVar 2) (LamAbs 1 (LamAbs 3 (LamApp (LamVar 3) (LamVar 1))))))] (LamAbs 4 (LamApp (LamMacro "F") (LamAbs 5 (LamApp (LamMacro "F") (LamAbs 6 (LamApp (LamApp (LamVar 5) (LamVar 6)) (LamVar 4)))))))
ex6'1 = LamDef [] (LamAbs 1 (LamApp (LamVar 1) (LamVar 2))) -- | (\x1 -> x1 x2)
ex6'2 = LamDef [ ("F",exId) ] (LamMacro "F") -- | def F = \x1 -> x1 in F
ex6'3 = LamDef [] ( LamApp exId (LamAbs 2 (LamVar 2))) -- | (\x1 -> x1) (\x2 -> x2)
wExp = (LamAbs 1 (LamApp (LamVar 1) (LamVar 1))) -- | (\x1 -> x1 x1)(\x1 -> x1 x1)
ex6'4 = LamDef [] (LamApp wExp wExp)
ex6'5 = LamDef [ ("ID",exId) , ("FST",LamAbs 1 (LamAbs 2 (LamVar 1))) ] -- | def ID = \x1 -> x1 in def FST = (\x1 -> λx2 -> x1) in FST x3 (ID x4)
( LamApp (LamApp (LamMacro "FST") (LamVar 3)) (LamApp (LamMacro "ID") (LamVar 4)))
ex6'6 = LamDef [ ("FST", LamAbs 1 (LamAbs 2 (LamVar 1)) ) ] -- | def FST = (\x1 -> λx2 -> x1) in FST x3 ((\x1 ->x1) x4))
( LamApp (LamApp (LamMacro "FST") (LamVar 3)) (LamApp (exId) (LamVar 4)))
ex6'7 = LamDef [ ("ID",exId) , ("SND",LamAbs 1 (LamAbs 2 (LamVar 2))) ] -- | def ID = \x1 -> x1 in def SND = (\x1 -> λx2 -> x2) in SND ((\x1 -> x1 x1 ) (\x1 -> x1 x1)) ID
(LamApp (LamApp (LamMacro "SND") (LamApp wExp wExp) ) (LamMacro "ID") )
ex6'1Ans = (Just 0,Just 0,Just 6,Just 6)
ex6'2Ans = (Just 1,Just 1,Just 3,Just 3)
ex6'3Ans = (Just 1,Just 1,Just 8,Just 8)
ex6'4Ans = (Nothing,Nothing,Nothing,Nothing)
ex6'5Ans = (Just 4,Just 4,Just 22,Just 22)
ex6'6Ans = (Just 4,Just 3,Just 21,Just 21)
ex6'7Ans = (Nothing,Just 4,Nothing,Nothing)
ex6'1Inner = LamDef [] (LamAbs 1 (LamApp (LamVar 1) (LamVar 2)))
ex6'2Inner = Just (LamDef [] (LamApp (LamAbs 1 (LamApp (LamAbs 3 (LamVar 3)) (LamVar 1))) (LamVar 2))) -- | (\x1 -> (\x3 -> x3) x1) x2
--ex6'3Inner = LamDef [] (LamAbs 1 (LamVar 1)) -- | (\x3 -> x3) x4 (\x1 -> (\x2 -> x2) x1)
ex6'1InnerAns = Nothing
\ 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