orx-concurrent-option 1.6.0

ConcurrentOption is a lock-free concurrent read and write option type.
Documentation
use orx_concurrent_option::*;

#[test]
fn iter_mut_when_none() {
    fn validate<'a>(mut iter: impl ExactSizeIterator<Item = &'a mut String>) {
        assert_eq!(iter.len(), 0);
        assert!(iter.next().is_none());
        assert!(iter.next().is_none());
    }

    let mut x = ConcurrentOption::<String>::none();
    validate(x.exclusive_iter_mut());
    validate(x.exclusive_iter_mut().rev());
    validate((&mut x).into_iter());
}

#[test]
fn iter_mut_when_some() {
    fn validate<'a>(mut iter: impl ExactSizeIterator<Item = &'a mut String>) {
        assert_eq!(iter.len(), 1);
        *iter.next().unwrap() = 7.to_string();
        assert_eq!(iter.len(), 0);
        assert!(iter.next().is_none());
        assert!(iter.next().is_none());
    }

    let mut x = ConcurrentOption::some(3.to_string());
    validate(x.exclusive_iter_mut());
    assert_eq!(unsafe { x.as_ref() }, Some(&7.to_string()));

    let mut x = ConcurrentOption::some(3.to_string());
    validate(x.exclusive_iter_mut().rev());
    assert_eq!(unsafe { x.as_ref() }, Some(&7.to_string()));

    let mut x = ConcurrentOption::some(3.to_string());
    validate((&mut x).into_iter());
    assert_eq!(unsafe { x.as_ref() }, Some(&7.to_string()));
}