extern crate futures; mod support; use futures::stream; use support::*; #[test] fn unfold1() { let mut stream = stream::unfold(0, |state| { if state <= 2 { let res: Result<_,()> = Ok((state * 2, state + 1)); Some(delay_future(res)) } else { None } }); // Creates the future with the closure // Not ready (delayed future) sassert_empty(&mut stream); // future is ready, yields the item sassert_next(&mut stream, 0); // Repeat sassert_empty(&mut stream); sassert_next(&mut stream, 2); sassert_empty(&mut stream); sassert_next(&mut stream, 4); // no more items sassert_done(&mut stream); } #[test] fn unfold_err1() { let mut stream = stream::unfold(0, |state| { if state <= 2 { Some(Ok((state * 2, state + 1))) } else { Some(Err(-1)) } }); sassert_next(&mut stream, 0); sassert_next(&mut stream, 2); sassert_next(&mut stream, 4); sassert_err(&mut stream, -1); // An error was generated by the stream, it will then finish sassert_done(&mut stream); }