index-set 0.2.0

bitset implementation with support for atomic operations
Documentation
use index_set::{AtomicBitSet, BitSet, SharedBitSet, slot_count};
use std::sync::atomic::AtomicU32;

#[test]
fn test_id_set() {
    let bitset: AtomicBitSet<{ slot_count::from_bits(128) }> = AtomicBitSet::new();

    bitset.insert(0);
    assert_eq!(bitset.has(0), true);

    assert_eq!(bitset.set_next_free_bit(), Some(1));
    assert_eq!(bitset.has(1), true);

    bitset.insert(2);
    assert_eq!(bitset.set_next_free_bit(), Some(3));
    assert_eq!(bitset.set_next_free_bit(), Some(4));
    assert_eq!(bitset.set_next_free_bit(), Some(5));

    bitset.remove(4);
    assert_eq!(bitset.has(4), false);
    assert_eq!(bitset.set_next_free_bit(), Some(4));

    while let Some(_) = bitset.set_next_free_bit() {}
    assert_eq!(bitset.set_next_free_bit(), None);

    assert_eq!(bitset.size(), 128);
    bitset.clear();
    assert_eq!(bitset.size(), 0);
}

#[test]
fn test_prev_value() {
    let bitset = [AtomicU32::new(0); slot_count::from_bits(64)];

    assert_eq!(bitset.remove(0), Some(false));
    assert_eq!(bitset.insert(0), Some(false));
    assert_eq!(bitset.insert(0), Some(true));
    assert_eq!(bitset.remove(0), Some(true));
    assert_eq!(bitset.remove(0), Some(false));

    assert!(bitset.insert(65).is_none());
}