orx-parallel 4.0.0

Performant parallel computations with an expressive iterator API.
Documentation
use crate::infallible::Xap;
use crate::infallible::xap_variants::Id;
use crate::option::XapOptionIter;
use crate::sizes::OneOne;
use alloc::vec;
use alloc::vec::Vec;

#[test]
fn xap_option_iter_matches_successful_pipeline() {
    let x1 = Id::<usize>::new().map(Some);
    let x2 = Id::<usize>::new();
    let values: Vec<_> = XapOptionIter::<_, _, _, _, OneOne>::new(0..4, x1, x2).collect();

    assert_eq!(values, vec![Some(0), Some(1), Some(2), Some(3)]);
}

#[test]
fn xap_option_iter_short_circuits_with_none() {
    let x1 = Id::<usize>::new().map(|x| (x != 2).then_some(x));
    let x2 = Id::<usize>::new();
    let values: Vec<_> = XapOptionIter::<_, _, _, _, OneOne>::new(0..4, x1, x2).collect();

    assert_eq!(values, vec![Some(0), Some(1), None, Some(3)]);
}