unitforge 0.4.1

A library for unit and quantity consistent computations in Rust
Documentation
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);
}