orx-concurrent-iter 3.3.0

A thread-safe and ergonomic concurrent iterator trait and efficient lock-free implementations.
Documentation
use orx_concurrent_iter::{implementations::ConIterRange, *};

#[test]
fn new() {
    let range = 3..10;
    let con_iter: ConIterRange<_> = range.into_con_iter();

    let mut i = 0;
    while let Some(x) = con_iter.next() {
        assert_eq!(x, 3 + i);
        i += 1;
    }
    assert_eq!(i, 7);
}

#[test]
fn debug() {
    let range = 3..10;
    let con_iter: ConIterRange<_> = range.into_con_iter();

    assert_eq!(
        format!("{:?}", con_iter),
        "ConIterRange { initial_len: 7, num_taken: 0, remaining: 7 }"
    );

    assert_eq!(con_iter.next(), Some(3));

    assert_eq!(
        format!("{:?}", con_iter),
        "ConIterRange { initial_len: 7, num_taken: 1, remaining: 6 }"
    );

    for _ in 0..6 {
        _ = con_iter.next();
    }

    assert_eq!(
        format!("{:?}", con_iter),
        "ConIterRange { initial_len: 7, num_taken: 7, remaining: 0 }"
    );

    _ = con_iter.next();

    assert_eq!(
        format!("{:?}", con_iter),
        "ConIterRange { initial_len: 7, num_taken: 7, remaining: 0 }"
    );
}

#[test]
fn clone() {
    let range = 3..6;
    let con_iter: ConIterRange<_> = range.into_con_iter();

    assert_eq!(con_iter.try_get_len(), Some(3));

    assert_eq!(con_iter.next(), Some(3));
    assert_eq!(con_iter.try_get_len(), Some(2));

    let clone = con_iter.clone();
    assert_eq!(con_iter.try_get_len(), Some(2));
    assert_eq!(clone.try_get_len(), Some(2));

    assert_eq!(clone.next(), Some(4));
    assert_eq!(clone.next(), Some(5));
    assert_eq!(con_iter.try_get_len(), Some(2));
    assert_eq!(clone.try_get_len(), Some(0));

    assert_eq!(clone.next(), None);
    assert_eq!(con_iter.try_get_len(), Some(2));
    assert_eq!(clone.try_get_len(), Some(0));
}