molframe-spatial 0.6.3

Deterministic spatial indices and neighbour search for molframe
Documentation
use super::*;

#[test]
fn a_list_reuses_candidates_only_within_half_the_skin() {
    let positions = [[0.0, 0.0, 0.0], [1.4, 0.0, 0.0]];
    let list = match NeighborList::build(
        &positions,
        &[0, 1],
        &[0, 1],
        1.0,
        0.5,
        None,
        CoordinateGeneration::INITIAL,
    ) {
        Ok(list) => list,
        Err(error) => panic!("build failed: {error}"),
    };
    let moved = [[0.2, 0.0, 0.0], [1.2, 0.0, 0.0]];
    let pairs = match list.pairs(&moved, 1.0, None) {
        Ok(pairs) => pairs,
        Err(error) => panic!("reuse failed: {error}"),
    };
    assert_eq!(pairs.len(), 1);

    let stale = [[0.3, 0.0, 0.0], [1.2, 0.0, 0.0]];
    assert_eq!(
        list.pairs(&stale, 1.0, None),
        Err(SpatialError::StaleNeighborList)
    );
}

#[test]
fn generation_identity_is_available_to_structure_caches() {
    let positions = [[0.0, 0.0, 0.0]];
    let list = match NeighborList::build(
        &positions,
        &[0],
        &[0],
        1.0,
        0.5,
        None,
        CoordinateGeneration::INITIAL,
    ) {
        Ok(list) => list,
        Err(error) => panic!("build failed: {error}"),
    };
    assert!(list.is_current(CoordinateGeneration::INITIAL));
    assert!(
        !list.is_current(
            CoordinateGeneration::INITIAL
                .next()
                .expect("initial generation advances")
        )
    );
}