convert forward into a method

This commit is contained in:
Daniel Barlow 2023-11-03 18:43:49 +00:00
parent d2f123bcf6
commit 1cc78f1e54

View File

@ -20,10 +20,12 @@ mod rover {
} }
} }
pub fn forward(slf : &Rover) -> Rover { impl Rover {
let Rover(lon, lat, direction) = slf; pub fn forward(&self) -> Rover {
let (xoff, yoff) = velocity(&direction); let Rover(lon, lat, direction) = self;
Rover(lon + xoff as i32, lat + yoff as i32, *direction) let (xoff, yoff) = velocity(&direction);
Rover(lon + xoff as i32, lat + yoff as i32, *direction)
}
} }
pub fn backward(slf : &Rover) -> Rover { pub fn backward(slf : &Rover) -> Rover {
@ -65,7 +67,7 @@ mod driver {
fn perform_command(command: &str, rover: &rover::Rover) -> rover::Rover { fn perform_command(command: &str, rover: &rover::Rover) -> rover::Rover {
match command { match command {
"f" => rover::forward(&rover), "f" => rover.forward(),
"b" => rover::backward(&rover), "b" => rover::backward(&rover),
"l" => rover::rotate(&rover, rover::Rotation::Left), "l" => rover::rotate(&rover, rover::Rotation::Left),
"r" => rover::rotate(&rover, rover::Rotation::Right), "r" => rover::rotate(&rover, rover::Rotation::Right),
@ -91,39 +93,39 @@ mod tests {
#[test] #[test]
fn move_north() { fn move_north() {
let r = Rover(1 as i32, 1 as i32, rover::Facing::N); let r = Rover(1 as i32, 1 as i32, rover::Facing::N);
assert_eq!(rover::forward(&r), assert_eq!(r.forward(),
Rover(1 as i32, 0 as i32, rover::Facing::N)); Rover(1 as i32, 0 as i32, rover::Facing::N));
let r = Rover(1 as i32, 3 as i32, rover::Facing::N); let r = Rover(1 as i32, 3 as i32, rover::Facing::N);
assert_eq!(rover::forward(&r), assert_eq!(r.forward(),
Rover(1 as i32, 2 as i32, rover::Facing::N)); Rover(1 as i32, 2 as i32, rover::Facing::N));
} }
#[test] #[test]
fn move_south() { fn move_south() {
let r = Rover(1 as i32, 1 as i32, rover::Facing::S); let r = Rover(1 as i32, 1 as i32, rover::Facing::S);
assert_eq!(rover::forward(&r), assert_eq!(r.forward(),
Rover(1 as i32, 2 as i32, rover::Facing::S)); Rover(1 as i32, 2 as i32, rover::Facing::S));
} }
#[test] #[test]
fn move_west() { fn move_west() {
let r = Rover(1 as i32, 1 as i32, rover::Facing::W); let r = Rover(1 as i32, 1 as i32, rover::Facing::W);
assert_eq!(rover::forward(&r), assert_eq!(r.forward(),
Rover(0 as i32, 1 as i32, rover::Facing::W)); Rover(0 as i32, 1 as i32, rover::Facing::W));
} }
#[test] #[test]
fn move_east() { fn move_east() {
let r = Rover(1 as i32, 1 as i32, rover::Facing::E); let r = Rover(1 as i32, 1 as i32, rover::Facing::E);
assert_eq!(rover::forward(&r), assert_eq!(r.forward(),
Rover(2 as i32, 1 as i32, rover::Facing::E)); Rover(2 as i32, 1 as i32, rover::Facing::E));
} }
#[test] #[test]
fn move_backward() { fn move_backward() {
let r = Rover(1 as i32, 1 as i32, rover::Facing::E); let r = Rover(1 as i32, 1 as i32, rover::Facing::E);
let r2 = rover::forward(&r); let r2 = r.forward();
assert_eq!(rover::backward(&r2), r); assert_eq!(rover::backward(&r2), r);
} }