molframe-core 0.5.0

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

#[test]
fn frame_chunks_share_the_coordinate_pointer_and_own_its_lifetime() {
    let coordinates: CoordinateBlock = [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]].into_iter().collect();
    let pointer = coordinates.as_slice().as_ptr();
    let descriptor = ChunkDescriptor::new(
        DatasetId::new(1),
        ChunkId::new(2),
        LogicalRow::new(u64::from(u32::MAX) + 1),
        2,
    )
    .expect("descriptor");
    let chunk = FrameChunk::shared(descriptor, coordinates.clone(), 0..2).expect("frame chunk");

    assert_eq!(chunk.positions().as_ptr(), pointer);
    drop(coordinates);
    assert_eq!(chunk.positions(), &[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]);
}

#[test]
fn local_rows_are_checked_before_global_resolution() {
    let descriptor =
        ChunkDescriptor::new(DatasetId::new(1), ChunkId::new(2), LogicalRow::new(90), 3)
            .expect("descriptor");
    assert_eq!(
        descriptor.resolve(LocalRow::new(2)),
        Ok(LogicalRow::new(92))
    );
    assert!(matches!(
        descriptor.resolve(LocalRow::new(3)),
        Err(ProviderError::LocalRowOutOfRange { .. })
    ));
}

#[test]
fn frame_chunks_reject_descriptor_payload_mismatch() {
    let coordinates: CoordinateBlock = [[1.0, 2.0, 3.0]].into_iter().collect();
    let descriptor =
        ChunkDescriptor::new(DatasetId::new(1), ChunkId::new(2), LogicalRow::new(0), 2)
            .expect("descriptor");
    assert!(matches!(
        FrameChunk::shared(descriptor, coordinates, 0..1),
        Err(ProviderError::PayloadLengthMismatch { .. })
    ));
}