use crate::declare_unit;
use crate::quan::Temperature;
declare_unit!(
DegC,
"°C",
Temperature,
1.0,
-273.15,
);
declare_unit!(
DegK,
"°K",
Temperature,
1.0,
0.0,
);
declare_unit!(
DegF,
"°F",
Temperature,
5.0 / 9.0,
-459.67,
);
declare_unit!(
DegR,
"°R",
Temperature,
5.0 / 9.0,
0.0,
);
declare_unit!(
DegRe,
"°Ré",
Temperature,
0.8,
-273.15,
);
#[cfg(test)]
mod test {
extern crate alloc;
use super::*;
use alloc::{format, string::ToString};
#[test]
fn temp_display() {
assert_eq!((22.4 * DegC).to_string(), "22.4 °C");
assert_eq!((-5.2 * DegF).to_string(), "-5.2 °F");
assert_eq!(format!("{:.1}", 111.1111 * DegK), "111.1 °K");
assert_eq!(format!("{:.2}", (32.0 * DegF).to::<DegC>()), "0.00 °C");
}
#[test]
fn temp_to() {
assert_eq!((32.0 * DegF).to(), 0.00000000000005684341886080802 * DegC);
assert_eq!((0.0 * DegC).to(), 31.999999999999943 * DegF);
assert_eq!((212.0 * DegF).to(), 100.00000000000006 * DegC);
assert_eq!((100.0 * DegC).to(), 211.99999999999994 * DegF);
assert_eq!((-273.15 * DegC).to(), 0.0 * DegK);
assert_eq!((0.0 * DegK).to(), -273.15 * DegC);
}
#[test]
fn temp_add() {
assert_eq!(10.0 * DegF + 5.5 * DegF, 15.5 * DegF);
assert_eq!(20.0 * DegC + 6.2 * DegC, 26.2 * DegC);
}
#[test]
fn temp_sub() {
assert_eq!(70.0 * DegF - 15.6 * DegF, 54.4 * DegF);
assert_eq!(40.0 * DegC - 16.1 * DegC, 23.9 * DegC);
}
}