use itertools::Itertools;
use noir_compute::operator::source::IteratorSource;
use utils::TestHelper;
mod utils;
#[test]
fn split_stream() {
TestHelper::local_remote_env(|env| {
let source = IteratorSource::new(0..5u8);
let mut splits = env.stream(source).shuffle().map(|n| n.to_string()).split(2);
let v1 = splits.pop().unwrap().map(|x| x.clone() + &x).collect_vec();
let v2 = splits.pop().unwrap().map(|x| x + "a").collect_vec();
env.execute_blocking();
if let Some(v1) = v1.get() {
assert_eq!(
v1.into_iter().sorted().collect_vec(),
&["00", "11", "22", "33", "44"]
);
}
if let Some(v2) = v2.get() {
assert_eq!(
v2.into_iter().sorted().collect_vec(),
&["0a", "1a", "2a", "3a", "4a"]
);
}
});
}
#[test]
fn double_split_stream() {
TestHelper::local_remote_env(|env| {
let source = IteratorSource::new(0..5u8);
let mut v1234 = env.stream(source).shuffle().split(2);
let mut v12 = v1234.pop().unwrap().split(2);
let mut v34 = v1234.pop().unwrap().split(2);
let res = vec![
v12.pop().unwrap().collect_vec(),
v12.pop().unwrap().collect_vec(),
v34.pop().unwrap().collect_vec(),
v34.pop().unwrap().collect_vec(),
];
env.execute_blocking();
for res in res {
if let Some(mut res) = res.get() {
res.sort_unstable();
assert_eq!(res, (0..5u8).collect_vec());
}
}
});
}