noir-compute 0.2.0

Network of Operators In Rust
Documentation
use noir_compute::operator::source::IteratorSource;
use utils::TestHelper;

mod utils;

#[test]
fn rich_filter_map_stream() {
    TestHelper::local_remote_env(|env| {
        let source = IteratorSource::new((0..6u8).map(|_| "a".to_owned()));
        let res = env
            .stream(source)
            .rich_filter_map({
                let mut s = String::new();
                move |x| {
                    s.push_str(&x);
                    if s.len() >= 4 {
                        Some(s.clone())
                    } else {
                        None
                    }
                }
            })
            .collect_vec();
        env.execute_blocking();
        if let Some(res) = res.get() {
            assert_eq!(res, &["aaaa", "aaaaa", "aaaaaa"]);
        }
    });
}

#[test]
fn rich_filter_map_keyed_stream() {
    TestHelper::local_remote_env(|env| {
        let source = IteratorSource::new((0..10u8).map(|x| if x % 2 == 0 { 'a' } else { 'b' }));
        let res = env
            .stream(source)
            .group_by(|c| *c)
            .rich_filter_map({
                let mut s = String::new();
                move |(_key, x)| {
                    s.push(x);
                    if s.len() >= 4 {
                        Some(s.clone())
                    } else {
                        None
                    }
                }
            })
            .drop_key()
            .collect_vec();
        env.execute_blocking();
        if let Some(mut res) = res.get() {
            res.sort_unstable();
            assert_eq!(res, &["aaaa", "aaaaa", "bbbb", "bbbbb"]);
        }
    });
}