o3 0.5.0

shared-nothing primitives
Documentation
use o3::collections::CellBitmap;

#[test]
fn rotates_and_wraps() {
    let bits = CellBitmap::with_capacity(130);
    assert!(bits.insert(65));
    assert!(bits.insert(2));
    assert!(!bits.insert(65));
    assert_eq!(bits.pop_next(), Some(2));
    assert!(bits.insert(1));
    assert_eq!(bits.pop_next(), Some(65));
    assert_eq!(bits.pop_next(), Some(1));
    assert!(bits.is_empty());
}

#[test]
fn filled_masks_tail() {
    let free = CellBitmap::filled(65);
    assert_eq!(free.len(), 65);
    for expected in 0..65 {
        assert_eq!(free.pop_next(), Some(expected));
    }
    assert_eq!(free.pop_next(), None);
}

#[test]
fn sparse_successor_lookup_crosses_summary_levels() {
    let bitmap = CellBitmap::with_capacity(1 << 20);
    assert!(bitmap.insert(900_001));
    assert!(bitmap.insert(17));
    assert_eq!(bitmap.pop_next(), Some(17));
    assert_eq!(bitmap.pop_next(), Some(900_001));
    assert!(bitmap.is_empty());

    bitmap.grow_to(1 << 21);
    assert!(bitmap.insert(1_900_003));
    assert_eq!(bitmap.pop_next(), Some(1_900_003));
}