implement backward()
this has meant changing the type signature of forward() so that it accepts the rover by reference not value, and making Facing a Copy type so that the direction passed to forward can also be returned in its output
This commit is contained in:
parent
d8c0a21985
commit
a8e9ab810c
29
src/main.rs
29
src/main.rs
@ -3,7 +3,7 @@ fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mod rover {
|
mod rover {
|
||||||
#[derive(Debug,PartialEq)]
|
#[derive(Debug, PartialEq, Copy, Clone)]
|
||||||
pub enum Facing { N, E, S, W }
|
pub enum Facing { N, E, S, W }
|
||||||
|
|
||||||
type Rover = (i32, i32, Facing);
|
type Rover = (i32, i32, Facing);
|
||||||
@ -17,12 +17,18 @@ mod rover {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn forward((lon, lat, direction) : Rover) -> Rover {
|
pub fn forward((lon, lat, direction) : &Rover) -> Rover {
|
||||||
let (xoff, yoff) = velocity(&direction);
|
let (xoff, yoff) = velocity(&direction);
|
||||||
(lon + xoff as i32, lat + yoff as i32, direction)
|
(lon + xoff as i32, lat + yoff as i32, *direction)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn backward((lon, lat, direction) : &Rover) -> Rover {
|
||||||
|
let (xoff, yoff) = velocity(&direction);
|
||||||
|
(lon - xoff as i32, lat - yoff as i32, *direction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
@ -30,32 +36,39 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn move_north() {
|
fn move_north() {
|
||||||
let r = (1 as i32, 1 as i32, rover::Facing::N);
|
let r = (1 as i32, 1 as i32, rover::Facing::N);
|
||||||
assert_eq!(rover::forward(r),
|
assert_eq!(rover::forward(&r),
|
||||||
(1 as i32, 0 as i32, rover::Facing::N));
|
(1 as i32, 0 as i32, rover::Facing::N));
|
||||||
|
|
||||||
let r = (1 as i32, 3 as i32, rover::Facing::N);
|
let r = (1 as i32, 3 as i32, rover::Facing::N);
|
||||||
assert_eq!(rover::forward(r),
|
assert_eq!(rover::forward(&r),
|
||||||
(1 as i32, 2 as i32, rover::Facing::N));
|
(1 as i32, 2 as i32, rover::Facing::N));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn move_south() {
|
fn move_south() {
|
||||||
let r = (1 as i32, 1 as i32, rover::Facing::S);
|
let r = (1 as i32, 1 as i32, rover::Facing::S);
|
||||||
assert_eq!(rover::forward(r),
|
assert_eq!(rover::forward(&r),
|
||||||
(1 as i32, 2 as i32, rover::Facing::S));
|
(1 as i32, 2 as i32, rover::Facing::S));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn move_west() {
|
fn move_west() {
|
||||||
let r = (1 as i32, 1 as i32, rover::Facing::W);
|
let r = (1 as i32, 1 as i32, rover::Facing::W);
|
||||||
assert_eq!(rover::forward(r),
|
assert_eq!(rover::forward(&r),
|
||||||
(0 as i32, 1 as i32, rover::Facing::W));
|
(0 as i32, 1 as i32, rover::Facing::W));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn move_east() {
|
fn move_east() {
|
||||||
let r = (1 as i32, 1 as i32, rover::Facing::E);
|
let r = (1 as i32, 1 as i32, rover::Facing::E);
|
||||||
assert_eq!(rover::forward(r),
|
assert_eq!(rover::forward(&r),
|
||||||
(2 as i32, 1 as i32, rover::Facing::E));
|
(2 as i32, 1 as i32, rover::Facing::E));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn move_backward() {
|
||||||
|
let r = (1 as i32, 1 as i32, rover::Facing::E);
|
||||||
|
let r2 = rover::forward(&r);
|
||||||
|
assert_eq!(rover::backward(&r2), r);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user