elm/exercises/robot-simulator/RobotSimulatorTests.elm
2016-04-07 20:07:45 -04:00

131 lines
3.5 KiB
Elm

module Main (..) where
import Task
import Console
import ElmTest exposing (..)
import RobotSimulator exposing (defaultRobot, Robot, Bearing(North, East, West, South), turnRight, turnLeft, advance, simulate)
tests : Test
tests =
suite
"RobotSimulator"
[ suite
"init"
(let
robot =
defaultRobot
in
[ test "coordinates" (assertEqual { x = 0, y = 0 } robot.coordinates)
, test "bearing" (assertEqual North robot.bearing)
]
)
, suite
"setup"
(let
robot =
Robot South { x = -1, y = 1 }
in
[ test "coordinates" (assertEqual { x = -1, y = 1 } robot.coordinates)
, test "bearing" (assertEqual South robot.bearing)
]
)
, suite
"turn right"
([1..3]
|> List.scanl (\_ r -> turnRight r) defaultRobot
|> List.map .bearing
|> assertionList [ North, East, South, West ]
|> List.map defaultTest
)
, suite
"turn left"
([1..3]
|> List.scanl (\_ r -> turnLeft r) defaultRobot
|> List.map .bearing
|> assertionList [ North, West, South, East ]
|> List.map defaultTest
)
, suite
"advance positive north"
(let
robot =
Robot North { x = 0, y = 0 }
|> advance
in
[ test "coordinates" (assertEqual { x = 0, y = 1 } robot.coordinates)
, test "bearing" (assertEqual North robot.bearing)
]
)
, suite
"advance positive east"
(let
robot =
Robot East { x = 0, y = 0 }
|> advance
in
[ test "coordinates" (assertEqual { x = 1, y = 0 } robot.coordinates)
, test "bearing" (assertEqual East robot.bearing)
]
)
, suite
"advance negative south"
(let
robot =
Robot South { x = 0, y = 0 }
|> advance
in
[ test "coordinates" (assertEqual { x = 0, y = -1 } robot.coordinates)
, test "bearing" (assertEqual South robot.bearing)
]
)
, suite
"advance positive west"
(let
robot =
Robot West { x = 0, y = 0 }
|> advance
in
[ test "coordinates" (assertEqual { x = -1, y = 0 } robot.coordinates)
, test "bearing" (assertEqual West robot.bearing)
]
)
, suite
"simulate prog 1"
(let
robot =
Robot North { x = 0, y = 0 }
|> simulate "LAAARALA"
in
[ test "coordinates" (assertEqual { x = -4, y = 1 } robot.coordinates)
, test "bearing" (assertEqual West robot.bearing)
]
)
, suite
"simulate prog 2"
(let
robot =
Robot East { x = 2, y = -7 }
|> simulate "RRAAAAALA"
in
[ test "coordinates" (assertEqual { x = -3, y = -8 } robot.coordinates)
, test "bearing" (assertEqual South robot.bearing)
]
)
, suite
"simulate prog 3"
(let
robot =
Robot South { x = 8, y = 4 }
|> simulate "LAAARRRALLLL"
in
[ test "coordinates" (assertEqual { x = 11, y = 5 } robot.coordinates)
, test "bearing" (assertEqual North robot.bearing)
]
)
]
port runner : Signal (Task.Task x ())
port runner =
Console.run (consoleRunner tests)