use crate::declare_unit;
use crate::quan::Mass;
declare_unit!(
t,
"t",
Mass,
1_000_000.0,
);
declare_unit!(
kg,
"kg",
Mass,
1_000.0,
);
declare_unit!(
g,
"g",
Mass,
1.0,
);
declare_unit!(
dg,
"dg",
Mass,
0.1,
);
declare_unit!(
cg,
"cg",
Mass,
0.01,
);
declare_unit!(
mg,
"mg",
Mass,
0.001,
);
declare_unit!(
ug,
"μg",
Mass,
0.000_001,
);
declare_unit!(
ng,
"ng",
Mass,
0.000_000_001,
);
declare_unit!(
lb,
"lb",
Mass,
453.592_37,
);
declare_unit!(
sl,
"sl",
Mass,
14_593.903,
);
declare_unit!(
Da,
"Da",
Mass,
1.660_539_066_60e-24,
);
#[cfg(test)]
mod test {
extern crate alloc;
use super::*;
use alloc::string::ToString;
#[test]
fn mass_display() {
assert_eq!((2.5 * kg).to_string(), "2.5 kg");
assert_eq!((10.0 * g).to_string(), "10 g");
assert_eq!((11.1 * dg).to_string(), "11.1 dg");
assert_eq!((25.0 * cg).to_string(), "25 cg");
assert_eq!((101.01 * mg).to_string(), "101.01 mg");
assert_eq!((3.9 * ug).to_string(), "3.9 μg");
}
#[test]
fn mass_to() {
assert_eq!((1.0 * g).to(), (0.001 * kg));
assert_eq!((110.0 * cg).to(), (1.1 * g));
}
#[test]
fn mass_add() {
assert_eq!(1.0 * g + 1.0 * g, 2.0 * g);
assert_eq!(1 * g + 1 * g, 2 * g);
}
#[test]
fn mass_sub() {
assert_eq!(5.0 * kg - 1.0 * kg, 4.0 * kg);
assert_eq!(500.0 * mg - 100.0 * mg, 400.0 * mg);
}
#[test]
fn mass_mul() {
assert_eq!((3.0 * ng) * 3.0, 9.0 * ng);
assert_eq!(3.0 * (3.0 * g), 9.0 * g);
}
#[test]
fn mass_div() {
assert_eq!((5.0 * dg) / 5.0, 1.0 * dg);
}
}