molframe-core 0.1.0

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

#[test]
fn an_all_present_mask_costs_a_length_rather_than_two_bit_sets() {
    let mask = ValidityMask::all_present(1_000_000);
    assert!(mask.is_all_present());
    assert_eq!(mask.present_count(), 1_000_000);
    assert!(matches!(mask, ValidityMask::AllPresent(_)));
}

#[test]
fn unrecorded_and_inapplicable_are_distinguishable_after_a_round_trip() {
    let mask =
        ValidityMask::try_from_iter([Presence::Present, Presence::Unknown, Presence::Inapplicable])
            .expect("small validity mask");
    assert_eq!(mask.get(0), Presence::Present);
    assert_eq!(mask.get(1), Presence::Unknown);
    assert_eq!(mask.get(2), Presence::Inapplicable);
    assert_eq!(mask.present_count(), 1);
}

#[test]
fn marking_a_position_absent_materialises_the_bit_sets_once() {
    let mut mask = ValidityMask::all_present(4);
    mask.set(2, Presence::Unknown);
    assert!(matches!(mask, ValidityMask::Mixed { .. }));
    assert_eq!(mask.get(0), Presence::Present);
    assert_eq!(mask.get(2), Presence::Unknown);
    assert_eq!(mask.present_count(), 3);
}

#[test]
fn marking_everything_present_again_collapses_the_mask() {
    let mut mask = ValidityMask::all_present(4);
    mask.set(1, Presence::Inapplicable);
    mask.set(1, Presence::Present);
    mask.compact();
    assert!(matches!(mask, ValidityMask::AllPresent(4)));
}

#[test]
fn a_position_past_the_end_is_inapplicable_rather_than_present() {
    let mask = ValidityMask::all_present(2);
    assert_eq!(mask.get(2), Presence::Inapplicable);
    assert_eq!(mask.get(u32::MAX), Presence::Inapplicable);
}

#[test]
fn setting_present_on_a_compact_mask_leaves_it_compact() {
    let mut mask = ValidityMask::all_present(8);
    mask.set(3, Presence::Present);
    assert!(matches!(mask, ValidityMask::AllPresent(8)));
}