@@ -83,3 +83,45 @@ fn finished_future_ok() {
8383 assert ! ( spawn. poll_stream_notify( & support:: notify_noop( ) , 0 ) . unwrap( ) . is_not_ready( ) ) ;
8484 assert ! ( spawn. poll_stream_notify( & support:: notify_noop( ) , 0 ) . unwrap( ) . is_not_ready( ) ) ;
8585}
86+
87+ #[ test]
88+ fn iter_mut_cancel ( ) {
89+ let ( a_tx, a_rx) = oneshot:: channel :: < u32 > ( ) ;
90+ let ( b_tx, b_rx) = oneshot:: channel :: < u32 > ( ) ;
91+ let ( c_tx, c_rx) = oneshot:: channel :: < u32 > ( ) ;
92+
93+ let mut stream = futures_unordered ( vec ! [ a_rx, b_rx, c_rx] ) ;
94+
95+ for rx in stream. iter_mut ( ) {
96+ rx. close ( ) ;
97+ }
98+
99+ assert ! ( a_tx. is_canceled( ) ) ;
100+ assert ! ( b_tx. is_canceled( ) ) ;
101+ assert ! ( c_tx. is_canceled( ) ) ;
102+
103+ let mut spawn = futures:: executor:: spawn ( stream) ;
104+ assert_eq ! ( Some ( Err ( futures:: sync:: oneshot:: Canceled ) ) , spawn. wait_stream( ) ) ;
105+ assert_eq ! ( Some ( Err ( futures:: sync:: oneshot:: Canceled ) ) , spawn. wait_stream( ) ) ;
106+ assert_eq ! ( Some ( Err ( futures:: sync:: oneshot:: Canceled ) ) , spawn. wait_stream( ) ) ;
107+ assert_eq ! ( None , spawn. wait_stream( ) ) ;
108+ }
109+
110+ #[ test]
111+ fn iter_mut_len ( ) {
112+ let mut stream = futures_unordered ( vec ! [
113+ futures:: future:: empty:: <( ) , ( ) >( ) ,
114+ futures:: future:: empty:: <( ) , ( ) >( ) ,
115+ futures:: future:: empty:: <( ) , ( ) >( )
116+ ] ) ;
117+
118+ let mut iter_mut = stream. iter_mut ( ) ;
119+ assert_eq ! ( iter_mut. len( ) , 3 ) ;
120+ assert ! ( iter_mut. next( ) . is_some( ) ) ;
121+ assert_eq ! ( iter_mut. len( ) , 2 ) ;
122+ assert ! ( iter_mut. next( ) . is_some( ) ) ;
123+ assert_eq ! ( iter_mut. len( ) , 1 ) ;
124+ assert ! ( iter_mut. next( ) . is_some( ) ) ;
125+ assert_eq ! ( iter_mut. len( ) , 0 ) ;
126+ assert ! ( iter_mut. next( ) . is_none( ) ) ;
127+ }
0 commit comments