use std::collections::HashSet;
use unitforge::quantities::{Area, AreaUnit, Distance, DistanceUnit, Force, ForceUnit};
use unitforge::PhysicsQuantity;
#[test]
fn new_scales_input_and_stores_canonical_parts() {
let output = Distance::new(1000.0, DistanceUnit::mm);
assert_eq!(output.get_tuple(), (1.0, 0));
assert_eq!(output.to(DistanceUnit::mm), 1000.0);
}
#[test]
fn zero_is_canonical_across_units() {
let force = Force::new(0.0, ForceUnit::kN);
assert_eq!(force.get_tuple(), (0.0, 0));
assert_eq!(force.to(ForceUnit::N), 0.0);
}
#[test]
fn optimal_unit_with_selection() {
let area = Area::new(0.0001, AreaUnit::msq);
let optimal_unit = area
.optimal_unit(
vec![AreaUnit::kmsq, AreaUnit::cmsq, AreaUnit::nmsq]
.into_iter()
.collect::<HashSet<_>>(),
)
.unwrap();
assert_eq!(optimal_unit, AreaUnit::cmsq);
}
#[test]
fn optimal_unit_returns_none_for_empty_choices() {
let area = Area::new(1.0, AreaUnit::msq);
assert_eq!(area.optimal_unit(HashSet::new()), None);
}