Documentation
use super::Register;

#[test]
fn get_empty() {
    let mut register = Register::<u8, u8>::new(100);
    assert!(register.get(0).is_none());
}

#[test]
fn set_one() {
    let mut register = Register::<u8, u8>::new(100);
    assert!(!register.set(0, Some(1)));
}

#[test]
fn set_again() {
    let mut register = Register::<u8, u8>::new(100);
    assert!(!register.set(0, Some(1)));
    assert!(register.set(0, Some(2)));
}

#[test]
fn get_one() {
    let mut register = Register::<u8, u8>::new(100);
    assert!(!register.set(0, Some(1)));
    assert!(*register.get(0).unwrap() == 1);
}

#[test]
fn set_many() {
    let mut register = Register::<u8, u8>::new(100);
    let mut range = 0..200;
    loop {
        match range.next() {
            Some(i) => { assert!(!register.set(i, Some(i+1))); },
            None => { break; }
        }
    }
    range = 100..200;
    loop {
        match range.next() {
            Some(i) => { assert!(register.set(i, Some(i+1))); },
            None => { break; }
        }
    }
    range = 0..100;
    loop {
        match range.next() {
            Some(i) => { assert!(!register.set(i, Some(i+1))); },
            None => { break; }
        }
    }
}

#[test]
fn get_many() {
    let mut register = Register::<u8, u8>::new(100);
    let mut range = 0..200;
    loop {
        match range.next() {
            Some(i) => {
                assert!(!register.set(i, Some(i+1)));
                assert!(*register.get(i).unwrap() == i+1);
            },
            None => { break; }
        }
    }
    range = 100..200;
    loop {
        match range.next() {
            Some(i) => {
                assert!(register.set(i, Some(i+1)));
                assert!(*register.get(i).unwrap() == i+1);
            },
            None => { break; }
        }
    }
    range = 0..100;
    loop {
        match range.next() {
            Some(i) => {
                assert!(register.get(i).is_none());
            },
            None => { break; }
        }
    }
}

#[test]
fn reset() {
    let mut register = Register::<u8, u8>::new(100);
    let mut range = 0..100;
    loop {
        match range.next() {
            Some(i) => {
                assert!(!register.set(i, Some(i+1)));
                assert!(*register.get(i).unwrap() == i+1);
            },
            None => { break; }
        }
    }
    register.reset();
    range = 0..100;
    loop {
        match range.next() {
            Some(i) => {
                assert!(register.get(i).is_none());
                assert!(!register.set(i, Some(i+1)));
            },
            None => { break; }
        }
    }
}