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"]); } }); }