use-physics 0.0.2

Composable facade crate for RustUse physics helpers
Documentation
fn approx_eq(left: f64, right: f64) -> bool {
    let scale = left.abs().max(right.abs()).max(1.0);
    (left - right).abs() <= 1.0e-12 * scale
}

#[cfg(feature = "plasma")]
#[test]
fn facade_reexports_plasma_workflow() {
    use use_physics::{ElectronPlasma, PROTON_MASS, PlasmaSpecies, alfven_speed, plasma};

    let plasma_state = ElectronPlasma::new(1.0e18, 10_000.0);
    let ion_species = PlasmaSpecies::new(1.0e18, 10_000.0, 1.0, PROTON_MASS);

    assert!(matches!(
        plasma_state.and_then(|value| value.plasma_frequency()),
        Some(value) if value.is_finite() && value > 0.0
    ));
    assert!(matches!(
        plasma_state.and_then(|value| value.debye_length()),
        Some(value) if value.is_finite() && value > 0.0
    ));
    assert!(matches!(
        ion_species.and_then(|value| value.pressure()),
        Some(value) if value.is_finite() && value > 0.0
    ));
    assert!(matches!(
        alfven_speed(1.0, 1.0e-12),
        Some(value) if value.is_finite() && value > 0.0
    ));
    assert!(matches!(
        plasma::charge_density(1.0e18, 1.0, 1.0e18),
        Some(value) if approx_eq(value, 0.0)
    ));
}

#[cfg(all(
    feature = "plasma",
    feature = "quantum",
    feature = "electromagnetism",
    feature = "magnetism"
))]
#[test]
fn facade_aliases_plasma_conflicting_exports() {
    assert!(approx_eq(
        use_physics::PLASMA_ELEMENTARY_CHARGE,
        use_physics::plasma::ELEMENTARY_CHARGE,
    ));
    assert!(approx_eq(
        use_physics::PLASMA_ELECTRON_MASS,
        use_physics::plasma::ELECTRON_MASS,
    ));
    assert!(approx_eq(
        use_physics::PLASMA_VACUUM_PERMITTIVITY,
        use_physics::plasma::VACUUM_PERMITTIVITY,
    ));
    assert!(approx_eq(
        use_physics::PLASMA_VACUUM_PERMEABILITY,
        use_physics::plasma::VACUUM_PERMEABILITY,
    ));
    assert_eq!(
        use_physics::plasma_magnetic_pressure(1.0),
        use_physics::plasma::magnetic_pressure(1.0)
    );
}