homework: dynamic insert / remove in devices and rooms
This commit is contained in:
@@ -28,6 +28,14 @@ impl Room {
|
||||
self.devices.get_mut(key)
|
||||
}
|
||||
|
||||
pub fn insert_device(&mut self, device: Device) -> Option<Device> {
|
||||
self.devices.insert(device.get_name().to_string(), device)
|
||||
}
|
||||
|
||||
pub fn remove_device(&mut self, key: &str) -> Option<Device> {
|
||||
self.devices.remove(key)
|
||||
}
|
||||
|
||||
pub fn print_status(&self) {
|
||||
println!("ROOM '{}':", self.name);
|
||||
println!("{}", "-".repeat(24));
|
||||
@@ -76,4 +84,25 @@ mod tests {
|
||||
);
|
||||
assert!(room.get_device("dummy").is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_add_remove() {
|
||||
let mut room = Room::new(
|
||||
"test_room",
|
||||
Box::new([
|
||||
Device::PowerSocket(PowerSocket::new("PSoc", 12.34, false)),
|
||||
Device::Thermometer(Thermometer::new("Therm", 21.56)),
|
||||
]),
|
||||
);
|
||||
let result = room.insert_device(Device::Thermometer(Thermometer::new("NewTerm", 20.0)));
|
||||
assert!(result.is_none());
|
||||
assert_eq!(room.devices.len(), 3);
|
||||
|
||||
let Some(Device::Thermometer(removed)) = room.remove_device("Therm") else {
|
||||
unreachable!()
|
||||
};
|
||||
assert_eq!(removed.get_name(), "Therm");
|
||||
assert_eq!(removed.get_temperature(), 21.56);
|
||||
assert_eq!(room.devices.len(), 2);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user