Merge branch 'position-move' into 'master'

change position x,y type + method is_valid and test for move robot

See merge request mhart/DancingDroids!27
This commit is contained in:
Martin HART 2020-10-26 13:54:17 +01:00
commit b98c1deb6a
1 changed files with 52 additions and 2 deletions

View File

@ -32,8 +32,19 @@ impl World {
/// Struct to store robot position. /// Struct to store robot position.
struct Position { struct Position {
x: u32, x: i32,
y: u32, y: i32,
}
impl Position {
/// Check if position is in the map.
fn is_valid(self, w: World) -> Result<(), String> {
if (self.x, self.y) > (0, 0) && (self.x, self.y) < (w.x as i32, w.y as i32) {
Ok(())
} else {
Err(String::from("Invalid position."))
}
}
} }
/// A Robot *aka droid* is represented here. /// A Robot *aka droid* is represented here.
@ -257,6 +268,22 @@ mod tests {
assert_eq!(w.map, vec!['↑', '.', '.', '.']); assert_eq!(w.map, vec!['↑', '.', '.', '.']);
} }
#[test]
fn test_move_robot() {
let mut r: Robot = Robot {
id: 0,
o: Orientation::N,
p: Position { x: 1, y: 1 },
q: Queue::new(),
};
r.move_forward();
assert_eq!(0, r.p.y);
r.move_right();
assert_eq!(2, r.p.x);
r.move_left();
assert_eq!(1, r.p.x);
}
#[test] #[test]
fn test_empty_position() { fn test_empty_position() {
let mut w: World = World { let mut w: World = World {
@ -267,4 +294,27 @@ mod tests {
w.create(); w.create();
assert!(w.empty_position(Position { x: 0, y: 0 })); assert!(w.empty_position(Position { x: 0, y: 0 }));
} }
#[test]
fn test_valid_position() {
let p: Position = Position { x: 1, y: 1 };
let w: World = World {
x: 5,
y: 5,
map: Vec::new(),
};
assert!(p.is_valid(w).is_ok());
}
#[test]
#[should_panic]
fn test_invalid_position() {
let p: Position = Position { x: -1, y: 1 };
let w: World = World {
x: 5,
y: 5,
map: Vec::new(),
};
assert!(p.is_valid(w).is_ok());
}
} }