57 lines
1.4 KiB
Rust
57 lines
1.4 KiB
Rust
#![allow(unused)]
|
|
|
|
use std::fmt::Display;
|
|
|
|
pub struct PowerSocket {
|
|
power_rate: f32,
|
|
on: bool,
|
|
}
|
|
|
|
impl PowerSocket {
|
|
pub fn new(power_rate: f32, on: bool) -> Self {
|
|
Self { power_rate, on }
|
|
}
|
|
|
|
pub fn is_on(&self) -> bool {
|
|
self.on
|
|
}
|
|
|
|
pub fn set_on(&mut self, on: bool) {
|
|
self.on = on
|
|
}
|
|
|
|
pub fn get_power(&self) -> f32 {
|
|
if self.on { self.power_rate } else { 0.0 }
|
|
}
|
|
|
|
pub fn display(&self) -> impl Display {
|
|
let state = if self.is_on() { "ON" } else { "OFF" };
|
|
format!("PowerSocket[ {} : {:02.1} ]", state, self.get_power())
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn smoke_test() {
|
|
let mut power_socket = PowerSocket::new(12.4, false);
|
|
assert_eq!(power_socket.power_rate, 12.4);
|
|
assert!(!power_socket.on);
|
|
assert!(!power_socket.is_on());
|
|
assert_eq!(power_socket.get_power(), 0.0);
|
|
|
|
power_socket.set_on(true);
|
|
assert!(power_socket.is_on());
|
|
assert_eq!(power_socket.get_power(), 12.4);
|
|
}
|
|
|
|
#[test]
|
|
fn display_test() {
|
|
assert_eq!(format!("{}", PowerSocket::new(11.549, false).display()), "PowerSocket[ OFF : 0.0 ]");
|
|
assert_eq!(format!("{}", PowerSocket::new(11.549, true).display()), "PowerSocket[ ON : 11.5 ]");
|
|
assert_eq!(format!("{}", PowerSocket::new(11.550, true).display()), "PowerSocket[ ON : 11.6 ]");
|
|
}
|
|
}
|