You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
867 B
36 lines
867 B
use futures::future;
|
|
use futures::stream;
|
|
|
|
use futures_test::future::FutureTestExt;
|
|
use futures_test::{
|
|
assert_stream_done, assert_stream_next, assert_stream_pending,
|
|
};
|
|
|
|
#[test]
|
|
fn unfold1() {
|
|
let mut stream = stream::unfold(0, |state| {
|
|
if state <= 2 {
|
|
future::ready(Some((state * 2, state + 1))).pending_once()
|
|
} else {
|
|
future::ready(None).pending_once()
|
|
}
|
|
});
|
|
|
|
// Creates the future with the closure
|
|
// Not ready (delayed future)
|
|
assert_stream_pending!(stream);
|
|
// Future is ready, yields the item
|
|
assert_stream_next!(stream, 0);
|
|
|
|
// Repeat
|
|
assert_stream_pending!(stream);
|
|
assert_stream_next!(stream, 2);
|
|
|
|
assert_stream_pending!(stream);
|
|
assert_stream_next!(stream, 4);
|
|
|
|
// No more items
|
|
assert_stream_pending!(stream);
|
|
assert_stream_done!(stream);
|
|
}
|