noir-compute 0.2.0

Network of Operators In Rust
Documentation
use itertools::Itertools;

use rand::{thread_rng, Rng};
use utils::TestHelper;

mod utils;

#[test]
fn map_memo_stream() {
    TestHelper::local_remote_env(|env| {
        let res = env
            .stream_par_iter(0..100u32)
            .map(|n| n % 5)
            .map_memo(|v| v * v, 1000)
            .collect_vec();
        env.execute_blocking();
        if let Some(mut res) = res.get() {
            let mut expected = (0..100u32).map(|n| (n % 5) * (n % 5)).collect_vec();
            res.sort();
            expected.sort();
            assert_eq!(res, expected);
        }
    });
}

#[test]
fn map_memo_by_stream() {
    TestHelper::local_remote_env(|env| {
        let res = env
            .stream_par_iter(0..1000u32)
            .map(|v| v as f32 + thread_rng().gen::<f32>() * 0.4)
            .map(|v| v.rem_euclid(30.))
            .map_memo_by(
                |v| {
                    let x = v.round() as i64;
                    x * x
                },
                |v| v.round() as i64,
                1000,
            )
            .collect_vec();
        env.execute_blocking();
        if let Some(mut res) = res.get() {
            let mut expected = (0..1000i64)
                .map(|v| v.rem_euclid(30))
                .map(|n| (n * n))
                .collect_vec();
            res.sort();
            expected.sort();
            assert_eq!(res, expected);
        }
    });
}