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::result::XapResultIter;
use crate::sizes::OneOne;
use alloc::vec;
use alloc::vec::Vec;

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

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

#[test]
fn xap_result_iter_preserves_errors() {
    let x1 = Id::<usize>::new().map(|x| if x == 2 { Err("error") } else { Ok(x) });
    let x2 = Id::<usize>::new();
    let values: Vec<_> = XapResultIter::<_, _, _, _, _, OneOne>::new(0..4, x1, x2).collect();

    assert_eq!(values, vec![Ok(0), Ok(1), Err("error"), Ok(3)]);
}