use-real 0.0.3

Utility-first real-number primitives for RustUse
Documentation
use use_real::{Real, RealError, RealInterval, approx_eq};

fn assert_close(left: f64, right: f64, tolerance: f64) {
    assert!(
        (left - right).abs() <= tolerance,
        "expected {left} to be within {tolerance} of {right}"
    );
}

#[test]
fn direct_real_usage_covers_finite_values_and_intervals() -> Result<(), RealError> {
    let value = Real::try_new(-3.5)?;
    let interval = RealInterval::try_new(-2.0, 6.0)?;
    let midpoint = interval.midpoint();
    let clamped = interval.clamp(value.abs());

    assert_close(midpoint.value(), 2.0, 1.0e-12);
    assert!(interval.contains(Real::try_new(1.5)?));
    assert!(!interval.contains(Real::try_new(7.0)?));
    assert_eq!(clamped, Real::try_new(3.5)?);
    assert!(approx_eq(midpoint, Real::try_new(2.0)?, 1.0e-12)?);

    Ok(())
}

#[test]
fn real_validation_rejects_invalid_inputs() {
    assert!(matches!(
        Real::try_new(f64::NAN),
        Err(RealError::NonFiniteValue { .. })
    ));
    assert!(matches!(
        RealInterval::try_new(2.0, -2.0),
        Err(RealError::InvalidInterval { .. })
    ));
}