Skip to content

Commit 579b98b

Browse files
ibraheemdevtaiki-e
authored andcommitted
Add SelectAll::clear (#2430)
1 parent d663bc1 commit 579b98b

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

futures-util/src/stream/select_all.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,11 @@ impl<St: Stream + Unpin> SelectAll<St> {
9090
pub fn iter_pin_mut(self: Pin<&mut Self>) -> IterPinMut<'_, StreamFuture<St>> {
9191
self.project().inner.iter_pin_mut()
9292
}
93+
94+
/// Clears the set, removing all futures.
95+
pub fn clear(&mut self) {
96+
self.inner.clear()
97+
}
9398
}
9499

95100
impl<St: Stream + Unpin> Default for SelectAll<St> {

futures/tests/stream_select_all.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use futures::channel::mpsc;
2-
use futures::executor::block_on_stream;
2+
use futures::executor::{block_on, block_on_stream};
33
use futures::future::{self, FutureExt};
44
use futures::stream::{self, select_all, FusedStream, SelectAll, StreamExt};
55
use futures::task::Poll;
@@ -76,3 +76,26 @@ fn works_1() {
7676
drop((a_tx, b_tx, c_tx));
7777
assert_eq!(None, stream.next());
7878
}
79+
80+
#[test]
81+
fn clear() {
82+
let mut tasks =
83+
select_all(vec![stream::iter(vec![1].into_iter()), stream::iter(vec![2].into_iter())]);
84+
85+
assert_eq!(block_on(tasks.next()), Some(1));
86+
assert!(!tasks.is_empty());
87+
88+
tasks.clear();
89+
assert!(tasks.is_empty());
90+
91+
tasks.push(stream::iter(vec![3].into_iter()));
92+
assert!(!tasks.is_empty());
93+
94+
tasks.clear();
95+
assert!(tasks.is_empty());
96+
97+
assert_eq!(block_on(tasks.next()), None);
98+
assert!(tasks.is_terminated());
99+
tasks.clear();
100+
assert!(!tasks.is_terminated());
101+
}

0 commit comments

Comments
 (0)