molframe-core 0.5.2

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

#[test]
fn an_element_set_answers_membership_without_a_search() {
    let mask: ElementMask = [Element::CARBON, Element::NITROGEN, Element::ZINC]
        .into_iter()
        .collect();
    assert!(mask.contains(Element::ZINC));
    assert!(!mask.contains(Element::IRON));
    assert_eq!(mask.len(), 3);
    assert!(!mask.is_empty());
}

#[test]
fn a_chunk_without_zinc_is_rejected_before_any_row_is_read() {
    let stats = AtomChunkStats {
        elements: [Element::CARBON, Element::OXYGEN].into_iter().collect(),
        ..AtomChunkStats::default()
    };
    assert!(stats.excludes_element(Element::ZINC));
    assert!(!stats.excludes_element(Element::CARBON));
}

#[test]
fn a_chunk_too_far_from_a_region_is_rejected_by_comparing_boxes() {
    let stats = AtomChunkStats {
        bounds: Aabb {
            min: [0.0; 3],
            max: [1.0; 3],
        },
        ..AtomChunkStats::default()
    };
    let far = Aabb {
        min: [100.0; 3],
        max: [101.0; 3],
    };
    assert!(stats.excludes_region(&far, 5.0));
    assert!(!stats.excludes_region(&far, 200.0));
}

#[test]
fn a_residue_range_outside_the_chunk_is_rejected_from_the_summary() {
    let stats = AtomChunkStats {
        residue_min: 10,
        residue_max: 20,
        ..AtomChunkStats::default()
    };
    assert!(stats.excludes_residues(0, 9));
    assert!(stats.excludes_residues(21, 100));
    assert!(!stats.excludes_residues(15, 15));
    assert!(!stats.excludes_residues(0, 100));
}

#[test]
fn extremes_ignore_values_that_are_not_numbers() {
    let mut extremes = Extremes::default();
    extremes.observe(f32::NAN);
    assert_eq!(extremes.min(), None);
    extremes.observe(30.0);
    extremes.observe(10.0);
    extremes.observe(f32::INFINITY);
    assert_eq!(extremes.min(), Some(10.0));
    assert_eq!(extremes.max(), Some(30.0));
}

#[test]
fn a_temperature_factor_filter_skips_a_chunk_whose_range_cannot_satisfy_it() {
    let mut extremes = Extremes::default();
    extremes.observe(5.0);
    extremes.observe(20.0);
    assert!(extremes.excludes_above(30.0));
    assert!(!extremes.excludes_above(15.0));
    assert!(extremes.excludes_below(1.0));
    assert!(!extremes.excludes_below(10.0));
}