use effect_rs::{Effect, EffectStream, Exit, Runtime};
#[test]
fn test_stream_iter_collect() {
let rt = Runtime::new();
let stream = EffectStream::<(), (), i32>::from_iter(vec![1, 2, 3]);
let program = stream.map(|i| i * 2).run_collect();
let res = rt.block_on(program, ());
match res {
Exit::Success(vec) => assert_eq!(vec, vec![2, 4, 6]),
Exit::Failure(_) => panic!("Stream failed"),
}
}
#[test]
fn test_stream_merge() {
let rt = Runtime::new();
let s1 = EffectStream::<(), (), i32>::from_iter(vec![1, 2]);
let s2 = EffectStream::<(), (), i32>::from_iter(vec![3, 4]);
let program = s1.merge(s2).run_collect();
let res = rt.block_on(program, ());
match res {
Exit::Success(mut items) => {
items.sort(); assert_eq!(items, vec![1, 2, 3, 4]);
}
_ => panic!("Stream failed"),
}
}
#[test]
fn test_stream_map_par() {
let rt = Runtime::new();
let data: Vec<i32> = (0..10).collect();
let stream = EffectStream::<(), (), i32>::from_iter(data);
let program = stream
.map_par(4, |n| {
Effect::succeed(n * 2).delay(tokio::time::Duration::from_millis(10)) })
.run_collect();
let res = rt.block_on(program, ());
match res {
Exit::Success(mut items) => {
items.sort();
assert_eq!(items, vec![0, 2, 4, 6, 8, 10, 12, 14, 16, 18]);
}
_ => panic!("Map par failed"),
}
}