commit 1cc78f1e54f4c8fad5693f2f3dad205bd5519725
parent d2f123bcf62239ee6d2ed6528b1671ce7e86ba8a
Author: Daniel Barlow <dan@telent.net>
Date: Fri, 3 Nov 2023 18:43:49 +0000
convert forward into a method
Diffstat:
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/src/main.rs b/src/main.rs
@@ -20,10 +20,12 @@ mod rover {
}
}
- pub fn forward(slf : &Rover) -> Rover {
- let Rover(lon, lat, direction) = slf;
- let (xoff, yoff) = velocity(&direction);
- Rover(lon + xoff as i32, lat + yoff as i32, *direction)
+ impl Rover {
+ pub fn forward(&self) -> Rover {
+ let Rover(lon, lat, direction) = self;
+ let (xoff, yoff) = velocity(&direction);
+ Rover(lon + xoff as i32, lat + yoff as i32, *direction)
+ }
}
pub fn backward(slf : &Rover) -> Rover {
@@ -65,7 +67,7 @@ mod driver {
fn perform_command(command: &str, rover: &rover::Rover) -> rover::Rover {
match command {
- "f" => rover::forward(&rover),
+ "f" => rover.forward(),
"b" => rover::backward(&rover),
"l" => rover::rotate(&rover, rover::Rotation::Left),
"r" => rover::rotate(&rover, rover::Rotation::Right),
@@ -91,39 +93,39 @@ mod tests {
#[test]
fn move_north() {
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));
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));
}
#[test]
fn move_south() {
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));
}
#[test]
fn move_west() {
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));
}
#[test]
fn move_east() {
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));
}
#[test]
fn move_backward() {
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);
}