molframe-core 0.6.1

Core types, storage and analysis contracts for molframe
Documentation
use super::*;

#[test]
fn borrowed_samples_preserve_endpoints_and_handle_extreme_finite_coordinates() {
    let start = [[f32::MAX, -f32::MAX, -0.0], [1.0, 2.0, 3.0]];
    let end = [[-f32::MAX, f32::MAX, 0.0], [3.0, 4.0, 5.0]];
    let sample = CoordinateSample::new(&start, &end, 0.5).expect("aligned columns");
    assert_eq!(sample.start.as_ptr(), start.as_ptr());
    assert_eq!(sample.end.as_ptr(), end.as_ptr());
    assert_eq!(sample.len(), 2);
    assert!(!sample.is_empty());
    assert_eq!(sample.position(0), Some([0.0; 3]));
    assert_eq!(sample.position(1), Some([2.0, 3.0, 4.0]));
    assert!(sample.position(2).is_none());
    assert_eq!(
        CoordinateSample::new(&start, &end, 0.0)
            .expect("start")
            .position(0)
            .expect("row")[2]
            .to_bits(),
        (-0.0f32).to_bits()
    );
    assert_eq!(
        CoordinateSample::new(&start, &end, 1.0)
            .expect("end")
            .position(0)
            .expect("row")[0]
            .to_bits(),
        (-f32::MAX).to_bits()
    );
}

#[test]
fn malformed_metadata_and_nonfinite_atom_rows_are_refused() {
    let start = [[0.0; 3]];
    let end = [[f32::NAN; 3]];
    assert!(CoordinateSample::new(&start, &[], 0.5).is_err());
    for weight in [-0.1, 1.1, f32::NAN, f32::INFINITY] {
        assert!(CoordinateSample::new(&start, &end, weight).is_err());
    }
    assert!(
        CoordinateSample::new(&start, &end, 0.5)
            .expect("metadata")
            .position(0)
            .is_none()
    );
    assert!(
        CoordinateSample::new(&[], &[], 0.5)
            .expect("empty columns")
            .is_empty()
    );
}