homework: options instead panics
This commit is contained in:
@@ -13,20 +13,16 @@ impl House {
|
||||
}
|
||||
}
|
||||
|
||||
fn check_bounds(&self, idx: usize) {
|
||||
if idx >= self.rooms.len() {
|
||||
panic!("Index is out of bounds")
|
||||
}
|
||||
fn is_valid_idx(&self, idx: usize) -> bool {
|
||||
idx < self.rooms.len()
|
||||
}
|
||||
|
||||
pub fn get_room(&self, idx: usize) -> &Room {
|
||||
self.check_bounds(idx);
|
||||
&self.rooms[idx]
|
||||
pub fn get_room(&self, idx: usize) -> Option<&Room> {
|
||||
if self.is_valid_idx(idx) { Some(&self.rooms[idx]) } else { None }
|
||||
}
|
||||
|
||||
pub fn get_room_mut(&mut self, idx: usize) -> &mut Room {
|
||||
self.check_bounds(idx);
|
||||
&mut self.rooms[idx]
|
||||
pub fn get_room_mut(&mut self, idx: usize) -> Option<&mut Room> {
|
||||
if self.is_valid_idx(idx) { Some(&mut self.rooms[idx]) } else { None }
|
||||
}
|
||||
|
||||
pub fn print_status(&self) {
|
||||
@@ -70,22 +66,33 @@ mod tests {
|
||||
house.print_status();
|
||||
assert_eq!(house.address, "Best street, 777");
|
||||
|
||||
assert_eq!(format!("{}", house.get_room(0).get_device(0).display()), "DEV:Thermometer[ 20.0 ]");
|
||||
assert_eq!(format!("{}", house.get_room(0).get_device(1).display()), "DEV:PowerSocket[ OFF : 0.0 ]");
|
||||
assert_eq!(format!("{}", house.get_room(1).get_device(0).display()), "DEV:PowerSocket[ ON : 11.1 ]");
|
||||
assert_eq!(
|
||||
format!("{}", house.get_room(0).unwrap().get_device(0).unwrap().display()),
|
||||
"DEV:Thermometer[ 20.0 ]"
|
||||
);
|
||||
assert_eq!(
|
||||
format!("{}", house.get_room(0).unwrap().get_device(1).unwrap().display()),
|
||||
"DEV:PowerSocket[ OFF : 0.0 ]"
|
||||
);
|
||||
assert_eq!(
|
||||
format!("{}", house.get_room(1).unwrap().get_device(0).unwrap().display()),
|
||||
"DEV:PowerSocket[ ON : 11.1 ]"
|
||||
);
|
||||
|
||||
let Device::PowerSocket(powers_socket) = house.get_room_mut(0).get_device_mut(1) else {
|
||||
let Device::PowerSocket(powers_socket) = house.get_room_mut(0).unwrap().get_device_mut(1).unwrap() else {
|
||||
unreachable!()
|
||||
};
|
||||
powers_socket.set_on(true);
|
||||
|
||||
assert_eq!(format!("{}", house.get_room(0).get_device(1).display()), "DEV:PowerSocket[ ON : 12.3 ]");
|
||||
assert_eq!(
|
||||
format!("{}", house.get_room(0).unwrap().get_device(1).unwrap().display()),
|
||||
"DEV:PowerSocket[ ON : 12.3 ]"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[should_panic(expected = "Index is out of bounds")]
|
||||
fn panic_test() {
|
||||
fn check_out_of_bounds() {
|
||||
let house = create_test_house();
|
||||
house.check_bounds(2);
|
||||
assert!(house.get_room(2).is_none());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user