orx-iterable 1.3.0

Defines and implements Iterable, Collection and CollectionMut traits to represent types that can be iterated over multiple times.
Documentation
use orx_iterable::*;

#[test]
fn once() {
    let it = orx_iterable::once::<usize>(42);

    assert_eq!(it.iter().count(), 1);
    assert_eq!(it.iter().sum::<usize>(), 42);

    let it = core::iter::once::<usize>(42);

    assert_eq!(it.iter().count(), 1);
    assert_eq!(it.iter().sum::<usize>(), 42);
}

#[test]
fn once_col() {
    let mut it = orx_iterable::once_col::<usize>(42);

    assert_eq!(it.iter().count(), 1);
    assert_eq!(it.iter().sum::<usize>(), 42);

    for x in it.iter_mut() {
        *x += 10;
    }

    assert_eq!(it.iter().count(), 1);
    assert_eq!(it.iter().sum::<usize>(), 52);
}

#[cfg(feature = "std")]
mod object_safe {
    use orx_iterable::{obj_safe::*, *};

    #[test]
    fn obj_once() {
        let it = orx_iterable::once::<usize>(42);

        assert_eq!(it.boxed_iter().count(), 1);
        assert_eq!(it.boxed_iter().sum::<usize>(), 42);

        let it = core::iter::once::<usize>(42);

        assert_eq!(it.boxed_iter().count(), 1);
        assert_eq!(it.boxed_iter().sum::<usize>(), 42);
    }

    #[test]
    fn obj_once_col() {
        let mut it = orx_iterable::once_col::<usize>(42);

        assert_eq!(it.boxed_iter().count(), 1);
        assert_eq!(it.boxed_iter().sum::<usize>(), 42);

        for x in it.iter_mut() {
            *x += 10;
        }

        assert_eq!(it.boxed_iter().count(), 1);
        assert_eq!(it.boxed_iter().sum::<usize>(), 52);
    }
}