diff --git a/cw/src/Challenges.hs b/cw/src/Challenges.hs
index a124d68dbbaf9cd98ee6342ac196321263f0cdef..9864c3d0cbdd6a7af6f6ead36725cd85fbf398b1 100644
--- a/cw/src/Challenges.hs
+++ b/cw/src/Challenges.hs
@@ -7,7 +7,7 @@
 -- DO NOT MODIFY THE FOLLOWING LINES OF CODE
 module Challenges (WordSearchGrid,Placement,Posn,Orientation(..),solveWordSearch, createWordSearch,
     LamMacroExpr(..),LamExpr(..),prettyPrint, parseLamMacro,
-    cpsTransform,innerRedn1,outerRedn1,compareInnerOuter,unique,macroName,closedParse,expr) where
+    cpsTransform,innerRedn1,outerRedn1,compareInnerOuter) where
 
 -- Import standard library and parsing definitions from Hutton 2016, Chapter 13
 -- We import System.Random - make sure that your installation has it installed - use stack ghci and stack ghc
diff --git a/cw/test/Spec.hs b/cw/test/Spec.hs
index e6c0ba8c352928f09cafc34bb0802d47af97d912..bc2a1df1b36df14079fcee8027bc74abff5dd32b 100644
--- a/cw/test/Spec.hs
+++ b/cw/test/Spec.hs
@@ -1,27 +1,40 @@
 import Challenges
 import Data.List
 
-main :: IO ()
-main = challenge2Test
 
+-------------------------------------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      ))]
 
-exGrid1'3  = ["TEST","ASBD","GDFI","FDGS"]
-exWords1'3 = ["TEST"]
-exAns1'3   = [("TEST",Just((0,0),Forward))]
+
+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) ) ] ()
+
+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"
 
 
+------------------------------Printing Functions--------------------------------
+
 
 printGrid :: WordSearchGrid -> IO ()
 printGrid [] = return ()
@@ -39,6 +52,16 @@ pPrintList cs = do putStr "["
                           ppl $ xs
 
 
+-------------------------------------Main---------------------------------------
+
+
+main :: IO ()
+main = do challenge1Test
+          challenge2Test
+
+
+-----------------------------Challenge 1 Testing--------------------------------
+
 
 assert1 :: WordSearchGrid -> [ (String,Maybe Placement) ] -> [ (String,Maybe Placement) ] -> IO ()
 assert1 grid result correct | result == correct = do putStrLn "Testing Grid:\n"
@@ -60,8 +83,10 @@ challenge1Test = do putStrLn "Challenge 1 Start Test"
                     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"
+                    putStrLn "Challenge 1 End Test\n"
+
 
+-----------------------------Challenge 2 Testing--------------------------------
 
 
 assert2 :: WordSearchGrid -> [ (String,Maybe Placement) ] -> IO ()
@@ -86,4 +111,14 @@ challenge2Test = do putStrLn "Challenge 2 Start Test"
                     (g1,sol1) <- createAndSolve ["WORD","EXAMPLE","SEARCH"] 0.3
                     assert2 g1 sol1
                     putStrLn "========================================="
-                    putStrLn "Challenge 2 End Test"
\ No newline at end of file
+                    putStrLn "Challenge 2 End Test"
+
+
+
+-----------------------------Challenge 3 Testing--------------------------------
+
+
+assert3
+
+
+-- challenge3Test
\ No newline at end of file