molframe-core 0.6.4

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

#[test]
fn a_terabyte_scale_catalog_does_not_materialise_chunk_metadata() {
    let logical_rows = 1_u64 << 40;
    let dataset = DatasetDescriptor::regular(
        DatasetId::new(9),
        PayloadKind::Frame,
        logical_rows,
        1,
        ChunkId::new(1_u64 << 48),
    )
    .expect("regular layout is representable");
    let catalog = DatasetCatalog::new(vec![dataset]).expect("one dataset is valid");

    assert_eq!(catalog.len(), 1);
    assert!(dataset.chunk_count() > u64::from(u32::MAX));
    assert_eq!(catalog.datasets().len(), 1);
    assert_eq!(
        std::mem::size_of_val(&catalog),
        std::mem::size_of::<DatasetCatalog>()
    );
}

#[test]
fn regular_chunks_resolve_rows_beyond_u32_without_saturation() {
    let dataset = DatasetDescriptor::regular(
        DatasetId::new(u64::MAX - 3),
        PayloadKind::Property,
        u64::from(u32::MAX) + 10_000,
        4096,
        ChunkId::new(70_000),
    )
    .expect("layout is representable");
    let ordinal = u64::from(u32::MAX) / 4096 + 1;
    let chunk = ChunkId::new(dataset.first_chunk().get() + ordinal);
    let descriptor = dataset.regular_chunk(chunk).expect("chunk exists");

    assert!(descriptor.logical_start().get() > u64::from(u32::MAX) - 4096);
    let global = descriptor
        .resolve(LocalRow::new(descriptor.rows() - 1))
        .expect("tail local row resolves");
    assert!(global.get() > u64::from(u32::MAX));
}

#[test]
fn identity_overflow_is_an_error_instead_of_a_saturated_range() {
    let result = DatasetDescriptor::regular(
        DatasetId::new(1),
        PayloadKind::Structure,
        2,
        1,
        ChunkId::new(u64::MAX),
    );
    assert!(matches!(
        result,
        Err(ProviderError::IdentityOverflow {
            field: "chunk identity",
            ..
        })
    ));
}

#[test]
fn catalogs_reject_overlapping_chunk_namespaces() {
    let first = DatasetDescriptor::regular(
        DatasetId::new(1),
        PayloadKind::Structure,
        10,
        5,
        ChunkId::new(10),
    )
    .expect("first layout");
    let second = DatasetDescriptor::regular(
        DatasetId::new(2),
        PayloadKind::Frame,
        10,
        5,
        ChunkId::new(11),
    )
    .expect("second layout");
    assert!(matches!(
        DatasetCatalog::new(vec![first, second]),
        Err(ProviderError::OverlappingChunkRange { .. })
    ));
}