sparse-bitfield 0.5.0

Bitfield that allocates a series of small buffers
Documentation
extern crate sparse_bitfield;

use sparse_bitfield::{Bitfield, Change};

#[test]
fn can_create_bitfield() {
  let _bits = Bitfield::new(1024);
}

#[test]
fn basic_set_get() {
  let mut bits = Bitfield::new(1024);
  bits.set(0, true);
  assert!(bits.get(0), true);
}

#[test]
fn can_set_bits() {
  let mut bits = Bitfield::new(1024);
  bits.set(100, true);
  bits.set(1_000, true);
  bits.set(1_000_000, true);
  bits.set(1_000_000_000, true);
  // bits.set(1_000_000_000_000, true);
}

#[test]
fn can_get_bits() {
  let mut bits = Bitfield::new(1024);
  bits.set(0, true);
  bits.set(1, true);
  bits.set(1000, true);
  assert_eq!(bits.get(0), true);
  assert_eq!(bits.get(1), true);
}

#[test]
fn returns_if_flipped() {
  let mut bits = Bitfield::new(1024);
  assert_eq!(bits.set(0, true), Change::Changed);
  assert_eq!(bits.set(0, false), Change::Changed);
  assert_eq!(bits.set(0, true), Change::Changed);
  assert_eq!(bits.set(0, true), Change::Unchanged);
  assert_eq!(bits.set(0, true), Change::Unchanged);
}

#[test]
fn exposes_changed_unchanged_methods() {
  let mut bits = Bitfield::new(1024);
  assert!(bits.set(0, true).is_changed());
  assert!(bits.set(0, true).is_unchanged());
}

#[test]
fn can_iterate() {
  let mut bits = Bitfield::new(1024);

  bits.set(0, true);
  for bit in bits.iter() {
    assert_eq!(bit, true, "one bit, value true");
  }

  bits.set(1, false);
  for (i, bit) in bits.iter().enumerate() {
    match i {
      0 => assert!(bit, true),
      1 => assert!(bit, false),
      i => panic!("index {} out of bounds", i),
    }
  }
}