mars-rover-fe

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 2b65145621ffbacaf13187df4dfb443996bab20c
parent 5a148a268836126aa9df771ff9bf0232e2a34959
Author: Daniel Barlow <dan@telent.net>
Date:   Tue, 31 Oct 2023 23:27:07 +0000

add S W E

Diffstat:
Msrc/main.rs | 29++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/main.rs b/src/main.rs @@ -9,7 +9,13 @@ mod rover { type Rover = (i32, i32, Facing); pub fn forward((lon, lat, direction) : Rover) -> Rover { - (lon as i32, lat - 1 as i32, direction) + let (xoff, yoff) = match direction { + Facing::N => ( 0, -1), + Facing::E => ( 1, 0), + Facing::S => ( 0, 1), + Facing::W => (-1, 0) + }; + (lon + xoff as i32, lat + yoff as i32, direction) } } @@ -27,4 +33,25 @@ mod tests { assert_eq!(rover::forward(r), (1 as i32, 2 as i32, rover::Facing::N)); } + + #[test] + fn move_south() { + let r = (1 as i32, 1 as i32, rover::Facing::S); + assert_eq!(rover::forward(r), + (1 as i32, 2 as i32, rover::Facing::S)); + } + + #[test] + fn move_west() { + let r = (1 as i32, 1 as i32, rover::Facing::W); + assert_eq!(rover::forward(r), + (0 as i32, 1 as i32, rover::Facing::W)); + } + + #[test] + fn move_east() { + let r = (1 as i32, 1 as i32, rover::Facing::E); + assert_eq!(rover::forward(r), + (2 as i32, 1 as i32, rover::Facing::E)); + } }