molframe 0.5.1

A batteries-included structural bioinformatics engine
Documentation
use super::*;

#[cfg(feature = "modelcif")]
#[test]
fn modelcif_plddt_becomes_a_shared_atom_property_without_changing_b_factors() {
    let source = include_str!("../../../molframe-modelcif/tests/fixtures/modelcif_plddt.cif");
    let (structure, findings) = read_bytes(
        source.as_bytes().to_vec(),
        Some("modelcif_plddt.cif"),
        &ReadOptions::new(),
    )
    .unwrap_or_else(|values| panic!("read failed: {values:?}"));
    assert!(findings.is_empty());
    let b_factor = structure
        .engine()
        .atom(crate::AtomIndex::new(0))
        .and_then(crate::AtomRef::b_factor)
        .expect("fixture B-factor");
    assert!((b_factor - 11.0).abs() < f32::EPSILON);

    let source_pointer = match structure
        .engine()
        .annotations()
        .get(crate::PLDDT_ANNOTATION)
    {
        Some(crate::AtomAnnotation::Real(column)) => column.values().as_ptr(),
        _ => panic!("lowered real pLDDT expected"),
    };
    let dataset = crate::engine::core::DatasetId::new(u64::from(u32::MAX) + 9);
    let first_chunk = crate::engine::core::ChunkId::new(u64::from(u32::MAX) + 17);
    let provider =
        crate::engine::core::PropertyChunkProvider::plddt(dataset, first_chunk, structure.into())
            .expect("pLDDT provider");
    let chunk = provider.chunk(first_chunk).expect("first pLDDT chunk");
    let values = chunk.reals().expect("real pLDDT values");
    assert_eq!(values.as_ptr(), source_pointer);
    assert_eq!(chunk.descriptor().dataset(), dataset);
    assert_eq!(chunk.descriptor().chunk(), first_chunk);
    assert_eq!(
        chunk
            .value(crate::engine::core::LocalRow::new(4))
            .expect("missing residue atom"),
        crate::engine::core::PropertyValue::Real(0.0, crate::engine::core::Presence::Unknown)
    );
    assert_eq!(
        chunk
            .value(crate::engine::core::LocalRow::new(9))
            .expect("non-polymer atom"),
        crate::engine::core::PropertyValue::Real(0.0, crate::engine::core::Presence::Inapplicable)
    );
    drop(provider);
    assert!((values[6] - 55.0).abs() < f64::EPSILON);
}