homework: add name to thermometer

This commit is contained in:
5 changed files with 39 additions and 23 deletions

View File

@@ -29,7 +29,7 @@ mod tests {
#[test] #[test]
fn smoke_test() { fn smoke_test() {
let dev_thermometer = Device::Thermometer(Thermometer::new(20.1)); let dev_thermometer = Device::Thermometer(Thermometer::new("Therm", 20.1));
let dev_power_socket = Device::PowerSocket(PowerSocket::new(11.2, false)); let dev_power_socket = Device::PowerSocket(PowerSocket::new(11.2, false));
dev_thermometer.print_status(); dev_thermometer.print_status();
@@ -40,16 +40,16 @@ mod tests {
unreachable!() unreachable!()
}; };
assert_eq!(format!("{}", thermometer.display()), "Thermometer[ 20.1 ]"); assert_eq!(format!("{}", thermometer.display()), "Therm[ 20.1 ]");
assert_eq!(format!("{}", power_socket.display()), "PowerSocket[ OFF : 0.0 ]"); assert_eq!(format!("{}", power_socket.display()), "PowerSocket[ OFF : 0.0 ]");
} }
#[test] #[test]
fn display_test() { fn display_test() {
let dev_thermometer = Device::Thermometer(Thermometer::new(20.1)); let dev_thermometer = Device::Thermometer(Thermometer::new("Therm", 20.1));
let dev_power_socket = Device::PowerSocket(PowerSocket::new(11.2, false)); let dev_power_socket = Device::PowerSocket(PowerSocket::new(11.2, false));
assert_eq!(format!("{}", dev_thermometer.display()), "DEV:Thermometer[ 20.1 ]"); assert_eq!(format!("{}", dev_thermometer.display()), "DEV:Therm[ 20.1 ]");
assert_eq!(format!("{}", dev_power_socket.display()), "DEV:PowerSocket[ OFF : 0.0 ]"); assert_eq!(format!("{}", dev_power_socket.display()), "DEV:PowerSocket[ OFF : 0.0 ]");
} }
} }

View File

@@ -47,14 +47,17 @@ mod tests {
Room::new( Room::new(
"main", "main",
Box::new([ Box::new([
Device::Thermometer(Thermometer::new(20.0)), Device::Thermometer(Thermometer::new("ThermA", 20.0)),
Device::PowerSocket(PowerSocket::new(12.34, false)), Device::PowerSocket(PowerSocket::new(12.34, false)),
Device::PowerSocket(PowerSocket::new(10.01, true)), Device::PowerSocket(PowerSocket::new(10.01, true)),
]), ]),
), ),
Room::new( Room::new(
"bedroom", "bedroom",
Box::new([Device::PowerSocket(PowerSocket::new(11.11, true)), Device::Thermometer(Thermometer::new(17.99))]), Box::new([
Device::PowerSocket(PowerSocket::new(11.11, true)),
Device::Thermometer(Thermometer::new("ThermB", 17.99)),
]),
), ),
]), ]),
) )
@@ -66,10 +69,7 @@ mod tests {
house.print_status(); house.print_status();
assert_eq!(house.address, "Best street, 777"); assert_eq!(house.address, "Best street, 777");
assert_eq!( assert_eq!(format!("{}", house.get_room(0).unwrap().get_device(0).unwrap().display()), "DEV:ThermA[ 20.0 ]");
format!("{}", house.get_room(0).unwrap().get_device(0).unwrap().display()),
"DEV:Thermometer[ 20.0 ]"
);
assert_eq!( assert_eq!(
format!("{}", house.get_room(0).unwrap().get_device(1).unwrap().display()), format!("{}", house.get_room(0).unwrap().get_device(1).unwrap().display()),
"DEV:PowerSocket[ OFF : 0.0 ]" "DEV:PowerSocket[ OFF : 0.0 ]"

View File

@@ -6,19 +6,25 @@ fn main() {
Box::new([ Box::new([
Room::new( Room::new(
"Hall", "Hall",
Box::new([Device::PowerSocket(PowerSocket::new(9.5, true)), Device::Thermometer(Thermometer::new(20.1))]), Box::new([
Device::PowerSocket(PowerSocket::new(9.5, true)),
Device::Thermometer(Thermometer::new("ThermA", 20.1)),
]),
), ),
Room::new( Room::new(
"Main", "Main",
Box::new([ Box::new([
Device::PowerSocket(PowerSocket::new(11.2, true)), Device::PowerSocket(PowerSocket::new(11.2, true)),
Device::Thermometer(Thermometer::new(24.5)), Device::Thermometer(Thermometer::new("ThermB", 24.5)),
Device::PowerSocket(PowerSocket::new(10.4, true)), Device::PowerSocket(PowerSocket::new(10.4, true)),
]), ]),
), ),
Room::new( Room::new(
"Bedroom", "Bedroom",
Box::new([Device::Thermometer(Thermometer::new(19.3)), Device::PowerSocket(PowerSocket::new(12.1, true))]), Box::new([
Device::Thermometer(Thermometer::new("ThermC", 19.3)),
Device::PowerSocket(PowerSocket::new(12.1, true)),
]),
), ),
]), ]),
); );

View File

@@ -44,14 +44,14 @@ mod tests {
fn smoke_test() { fn smoke_test() {
let devices = Box::new([ let devices = Box::new([
Device::PowerSocket(PowerSocket::new(12.34, false)), Device::PowerSocket(PowerSocket::new(12.34, false)),
Device::Thermometer(Thermometer::new(21.56)), Device::Thermometer(Thermometer::new("Therm", 21.56)),
]); ]);
let mut room = Room::new("test_room", devices); let mut room = Room::new("test_room", devices);
assert_eq!(room.name, "test_room"); assert_eq!(room.name, "test_room");
room.print_status(); room.print_status();
assert_eq!(format!("{}", room.get_device(0).unwrap().display()), "DEV:PowerSocket[ OFF : 0.0 ]"); assert_eq!(format!("{}", room.get_device(0).unwrap().display()), "DEV:PowerSocket[ OFF : 0.0 ]");
assert_eq!(format!("{}", room.get_device(1).unwrap().display()), "DEV:Thermometer[ 21.6 ]"); assert_eq!(format!("{}", room.get_device(1).unwrap().display()), "DEV:Therm[ 21.6 ]");
let Device::PowerSocket(power_socket) = room.get_device_mut(0).unwrap() else { let Device::PowerSocket(power_socket) = room.get_device_mut(0).unwrap() else {
unreachable!() unreachable!()
@@ -59,7 +59,7 @@ mod tests {
power_socket.set_on(true); power_socket.set_on(true);
assert_eq!(format!("{}", room.get_device(0).unwrap().display()), "DEV:PowerSocket[ ON : 12.3 ]"); assert_eq!(format!("{}", room.get_device(0).unwrap().display()), "DEV:PowerSocket[ ON : 12.3 ]");
assert_eq!(format!("{}", room.get_device(1).unwrap().display()), "DEV:Thermometer[ 21.6 ]"); assert_eq!(format!("{}", room.get_device(1).unwrap().display()), "DEV:Therm[ 21.6 ]");
} }
#[test] #[test]
@@ -68,7 +68,7 @@ mod tests {
"test_room", "test_room",
Box::new([ Box::new([
Device::PowerSocket(PowerSocket::new(12.34, false)), Device::PowerSocket(PowerSocket::new(12.34, false)),
Device::Thermometer(Thermometer::new(21.56)), Device::Thermometer(Thermometer::new("Therm", 21.56)),
]), ]),
); );
assert!(room.get_device(2).is_none()); assert!(room.get_device(2).is_none());

View File

@@ -1,12 +1,20 @@
use std::fmt::Display; use std::fmt::Display;
pub struct Thermometer { pub struct Thermometer {
name: String,
temperature: f32, temperature: f32,
} }
impl Thermometer { impl Thermometer {
pub fn new(temperature: f32) -> Self { pub fn new(name: impl AsRef<str>, temperature: f32) -> Self {
Self { temperature } Self {
name: name.as_ref().to_string(),
temperature,
}
}
pub fn get_name(&self) -> &str {
&self.name
} }
pub fn get_temperature(&self) -> f32 { pub fn get_temperature(&self) -> f32 {
@@ -14,7 +22,7 @@ impl Thermometer {
} }
pub fn display(&self) -> impl Display { pub fn display(&self) -> impl Display {
format!("Thermometer[ {:02.1} ]", self.get_temperature()) format!("{}[ {:02.1} ]", self.get_name(), self.get_temperature())
} }
} }
@@ -24,14 +32,16 @@ mod tests {
#[test] #[test]
fn smoke_test() { fn smoke_test() {
let thermometer = Thermometer::new(20.0); let thermometer = Thermometer::new("TERM", 20.0);
assert_eq!(thermometer.temperature, 20.0); assert_eq!(thermometer.temperature, 20.0);
assert_eq!(thermometer.get_temperature(), 20.0); assert_eq!(thermometer.get_temperature(), 20.0);
assert_eq!(thermometer.name, "TERM");
assert_eq!(thermometer.get_name(), "TERM");
} }
#[test] #[test]
fn display_test() { fn display_test() {
assert_eq!(format!("{}", Thermometer::new(19.550).display()), "Thermometer[ 19.5 ]"); assert_eq!(format!("{}", Thermometer::new("T1", 19.550).display()), "T1[ 19.5 ]");
assert_eq!(format!("{}", Thermometer::new(19.551).display()), "Thermometer[ 19.6 ]"); assert_eq!(format!("{}", Thermometer::new("T2", 19.551).display()), "T2[ 19.6 ]");
} }
} }