physics_in_parallel 3.0.3

High-performance infrastructure for numerical simulations in physics
Documentation
use physics_in_parallel::models::laws::{PowerLawDecay, PowerLawError, Spring, SpringLawError};

#[test]
fn spring_law_validates_payload_parameters() {
    let spring = Spring::new(2.0, 1.5, Some((0.2, 4.0))).unwrap();
    assert_eq!(spring.k, 2.0);
    assert_eq!(spring.l_0, 1.5);
    assert_eq!(spring.cutoff, Some((0.2, 4.0)));

    assert!(matches!(
        Spring::new(f64::NAN, 1.0, None).unwrap_err(),
        SpringLawError::InvalidSpringConstant { k } if k.is_nan()
    ));
    assert_eq!(
        Spring::new(1.0, -1.0, None).unwrap_err(),
        SpringLawError::InvalidRestLength { l_0: -1.0 }
    );
    assert_eq!(
        Spring::new(1.0, 1.0, Some((2.0, 1.0))).unwrap_err(),
        SpringLawError::InvalidCutoff { min: 2.0, max: 1.0 }
    );
}

#[test]
fn power_law_validates_payload_parameters() {
    let law = PowerLawDecay::new(6.0, -2.0, Some((0.1, 9.0))).unwrap();
    assert_eq!(law.k, 6.0);
    assert_eq!(law.alpha, -2.0);
    assert_eq!(law.range, Some((0.1, 9.0)));

    assert!(matches!(
        PowerLawDecay::new(f64::NAN, 1.0, None).unwrap_err(),
        PowerLawError::InvalidStrength { k } if k.is_nan()
    ));
    assert_eq!(
        PowerLawDecay::new(1.0, f64::INFINITY, None).unwrap_err(),
        PowerLawError::InvalidExponent {
            alpha: f64::INFINITY
        }
    );
    assert_eq!(
        PowerLawDecay::new(1.0, -2.0, Some((5.0, 1.0))).unwrap_err(),
        PowerLawError::InvalidRange { min: 5.0, max: 1.0 }
    );
}