fill 0.1.1

Provides the Fill trait, an alternative to Extend for finite containers
Documentation
use fill::Fill;

#[test]
fn slice() {
    let mut memory = [0u8; 8];
    let tail = memory.iter_mut().fill_and_keep_tail(0..);

    assert_eq!(memory, [0, 1, 2, 3, 4, 5, 6, 7]);
    assert_eq!(tail.start, 8);
}

#[test]
fn slice_and_swap() {
    let mut zero = [0u8; 2];
    let mut ones = [1u8; 4];

    zero.iter_mut().fill(ones.iter_mut());
    assert_eq!(zero, [1, 1]);
    assert_eq!(ones, [0, 0, 1, 1]);
}

#[test]
fn option() {
    let mut slot = None;
    slot.fill(Some(42));
    assert_eq!(slot, Some(42));

    slot.fill(Some(0xFF));
    assert_eq!(slot, Some(42));
}

#[test]
fn result() {
    let mut memory = [0u8; 4];
    let mut free = Ok(memory.iter_mut());

    let unfilled = free.fill_and_keep_tail((0..2).map(Ok));
    assert_eq!(free.as_ref().ok().unwrap().len(), 2);
    assert_eq!(unfilled.len(), 0);

    let unfilled = free.fill_and_keep_tail(vec![Err(0xee), Ok(4)]);
    assert_eq!(free.err(), Some(0xee));
    assert_eq!(unfilled.len(), 1);

    assert_eq!(memory, [0, 1, 0, 0]);
}