cube-hs-0.4.0.0: test/Main.hs
module Main (main) where
import Data.Cube
import System.Exit (exitFailure)
import Data.Maybe (fromMaybe)
assertTest :: String -> Bool -> IO()
assertTest name predicate = do
putStr $ "[Test] -- " ++ name ++ "..."
if predicate
then putStrLn "\ESC[32m[PASSED]\ESC[0m"
else do
putStrLn "\ESC[31m[FAILED]\ESC[0m"
exitFailure
main :: IO ()
main = do
let initStr = showCube cubeId
assertTest "Initial cube color string matches standard"
(initStr == "UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB")
assertTest "Standard initial cube is legal"
(isLegalCubeString initStr)
let identityMoves = unsafeSolveFrom cubeId
assertTest "Solving already solved cube returns no moves"
(null identityMoves)
let scrambledTurns = fromMaybe [] $ parseTurns "U F U' L2 R L' D2 B"
assertTest "Parsing valid turns"
(scrambledTurns == [Ux1, Fx1, Ux3, Lx2, Rx1, Lx3, Dx2, Bx1])
let scrambledCube = foldl (&>) cubeId scrambledTurns
assertTest "Verifying scrambled cube string"
(showCube scrambledCube == "FFLBURBURUUFRRRDDBUFBUFDFBRUDFBDFLLRDLLULLBRRULLFBBDDD")
let sol = unsafeSolveFrom scrambledCube
assertTest "Verifying solution"
(applyTurns scrambledCube sol == cubeId)