bit-iter 0.1.4

Iterate forward or backwards over the positions of set bits in a word.
Documentation
use super::*;

#[test]
fn zero_value_handled_correctly() {
    let mut iter = BitIter::from(0u8);
    assert_eq!(iter.next(), None);
}

#[test]
fn non_zero_unsigned_value_handled_correctly() {
    let mut iter = BitIter::from(0x80010011u32);
    assert_eq!(iter.next(), Some(0));
    assert_eq!(iter.next(), Some(4));
    assert_eq!(iter.next(), Some(16));
    assert_eq!(iter.next(), Some(31));
    assert_eq!(iter.next(), None);
}

#[test]
fn non_zero_signed_value_handled_correctly() {
    let mut iter = BitIter::from(0x80010011u32 as i32);
    assert_eq!(iter.next(), Some(0));
    assert_eq!(iter.next(), Some(4));
    assert_eq!(iter.next(), Some(16));
    assert_eq!(iter.next(), Some(31));
    assert_eq!(iter.next(), None);
}

#[test]
fn size_hint_works() {
    let iter = BitIter::from(0x25);
    assert_eq!(iter.size_hint(), (3, Some(3)));

    let iter = BitIter::from(1);
    assert_eq!(iter.size_hint(), (1, Some(1)));

    let iter = BitIter::from(0);
    assert_eq!(iter.size_hint(), (0, Some(0)));
}

#[test]
fn count_works() {
    let iter = BitIter::from(0x25);
    assert_eq!(iter.count(), 3);

    let iter = BitIter::from(1);
    assert_eq!(iter.count(), 1);

    let iter = BitIter::from(0);
    assert_eq!(iter.count(), 0);
}

#[test]
fn last_works() {
    let iter = BitIter::from(0x25);
    assert_eq!(iter.last(), Some(5usize));

    let iter = BitIter::from(1);
    assert_eq!(iter.last(), Some(0usize));

    let iter = BitIter::from(0);
    assert_eq!(iter.last(), None);
}

#[test]
fn max_works() {
    let iter = BitIter::from(0x25);
    assert_eq!(iter.max(), Some(5usize));

    let iter = BitIter::from(1);
    assert_eq!(iter.max(), Some(0usize));

    let iter = BitIter::from(0);
    assert_eq!(iter.max(), None);
}

#[test]
fn min_works() {
    let iter = BitIter::from(0xa4);
    assert_eq!(iter.min(), Some(2usize));

    let iter = BitIter::from(0x80);
    assert_eq!(iter.min(), Some(7usize));

    let iter = BitIter::from(0);
    assert_eq!(iter.min(), None);
}

#[test]
fn can_iterate_in_reverse_order() {
    let mut iter = BitIter::from(0x80010011u32).rev();
    assert_eq!(iter.next(), Some(31));
    assert_eq!(iter.next(), Some(16));
    assert_eq!(iter.next(), Some(4));
    assert_eq!(iter.next(), Some(0));
    assert_eq!(iter.next(), None);
}