From b296156206a9b1bc4473c163bff44e6f2bc95573 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Sun, 3 Jan 2021 16:48:43 +0000 Subject: [rust] Robot Simulator --- rust/robot-simulator/tests/robot-simulator.rs | 126 ++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 rust/robot-simulator/tests/robot-simulator.rs (limited to 'rust/robot-simulator/tests/robot-simulator.rs') diff --git a/rust/robot-simulator/tests/robot-simulator.rs b/rust/robot-simulator/tests/robot-simulator.rs new file mode 100644 index 0000000..14235e9 --- /dev/null +++ b/rust/robot-simulator/tests/robot-simulator.rs @@ -0,0 +1,126 @@ +use robot_simulator::*; + +#[test] +fn robots_are_created_with_position_and_direction() { + let robot = Robot::new(0, 0, Direction::North); + assert_eq!((0, 0), robot.position()); + assert_eq!(&Direction::North, robot.direction()); +} + +#[test] +fn positions_can_be_negative() { + let robot = Robot::new(-1, -1, Direction::South); + assert_eq!((-1, -1), robot.position()); + assert_eq!(&Direction::South, robot.direction()); +} + +#[test] +fn turning_right_does_not_change_position() { + let robot = Robot::new(0, 0, Direction::North).turn_right(); + assert_eq!((0, 0), robot.position()); +} + +#[test] +fn turning_right_from_north_points_the_robot_east() { + let robot = Robot::new(0, 0, Direction::North).turn_right(); + assert_eq!(&Direction::East, robot.direction()); +} + +#[test] +fn turning_right_from_east_points_the_robot_south() { + let robot = Robot::new(0, 0, Direction::East).turn_right(); + assert_eq!(&Direction::South, robot.direction()); +} + +#[test] +fn turning_right_from_south_points_the_robot_west() { + let robot = Robot::new(0, 0, Direction::South).turn_right(); + assert_eq!(&Direction::West, robot.direction()); +} + +#[test] +fn turning_right_from_west_points_the_robot_north() { + let robot = Robot::new(0, 0, Direction::West).turn_right(); + assert_eq!(&Direction::North, robot.direction()); +} + +#[test] +fn turning_left_does_not_change_position() { + let robot = Robot::new(0, 0, Direction::North).turn_left(); + assert_eq!((0, 0), robot.position()); +} + +#[test] +fn turning_left_from_north_points_the_robot_west() { + let robot = Robot::new(0, 0, Direction::North).turn_left(); + assert_eq!(&Direction::West, robot.direction()); +} + +#[test] +fn turning_left_from_west_points_the_robot_south() { + let robot = Robot::new(0, 0, Direction::West).turn_left(); + assert_eq!(&Direction::South, robot.direction()); +} + +#[test] +fn turning_left_from_south_points_the_robot_east() { + let robot = Robot::new(0, 0, Direction::South).turn_left(); + assert_eq!(&Direction::East, robot.direction()); +} + +#[test] +fn turning_left_from_east_points_the_robot_north() { + let robot = Robot::new(0, 0, Direction::East).turn_left(); + assert_eq!(&Direction::North, robot.direction()); +} + +#[test] +fn advance_does_not_change_the_direction() { + let robot = Robot::new(0, 0, Direction::North).advance(); + assert_eq!(&Direction::North, robot.direction()); +} + +#[test] +fn advance_increases_the_y_coordinate_by_one_when_facing_north() { + let robot = Robot::new(0, 0, Direction::North).advance(); + assert_eq!((0, 1), robot.position()); +} + +#[test] +fn advance_decreases_the_y_coordinate_by_one_when_facing_south() { + let robot = Robot::new(0, 0, Direction::South).advance(); + assert_eq!((0, -1), robot.position()); +} + +#[test] +fn advance_increases_the_x_coordinate_by_one_when_facing_east() { + let robot = Robot::new(0, 0, Direction::East).advance(); + assert_eq!((1, 0), robot.position()); +} + +#[test] +fn advance_decreases_the_x_coordinate_by_one_when_facing_west() { + let robot = Robot::new(0, 0, Direction::West).advance(); + assert_eq!((-1, 0), robot.position()); +} + +#[test] +fn follow_instructions_to_move_west_and_north() { + let robot = Robot::new(0, 0, Direction::North).instructions("LAAARALA"); + assert_eq!((-4, 1), robot.position()); + assert_eq!(&Direction::West, robot.direction()); +} + +#[test] +fn follow_instructions_to_move_west_and_south() { + let robot = Robot::new(2, -7, Direction::East).instructions("RRAAAAALA"); + assert_eq!((-3, -8), robot.position()); + assert_eq!(&Direction::South, robot.direction()); +} + +#[test] +fn follow_instructions_to_move_east_and_north() { + let robot = Robot::new(8, 4, Direction::South).instructions("LAAARRRALLLL"); + assert_eq!((11, 5), robot.position()); + assert_eq!(&Direction::North, robot.direction()); +} -- cgit v1.2.3