@@ -328,14 +328,25 @@ impl<T: Component> Events<T> {
328328 events. update ( ) ;
329329 }
330330
331+ #[ inline]
332+ fn increment_start_event_count ( & mut self ) {
333+ let count = self . event_count + 1 ;
334+ self . a_start_event_count = count;
335+ self . b_start_event_count = count;
336+ }
337+
331338 /// Removes all events.
339+ #[ inline]
332340 pub fn clear ( & mut self ) {
341+ self . increment_start_event_count ( ) ;
333342 self . events_a . clear ( ) ;
334343 self . events_b . clear ( ) ;
335344 }
336345
337346 /// Creates a draining iterator that removes all events.
338347 pub fn drain ( & mut self ) -> impl Iterator < Item = T > + ' _ {
348+ self . increment_start_event_count ( ) ;
349+
339350 let map = |i : EventInstance < T > | i. event ;
340351 match self . state {
341352 State :: A => self
@@ -480,4 +491,40 @@ mod tests {
480491 ) -> Vec < TestEvent > {
481492 reader. iter ( events) . cloned ( ) . collect :: < Vec < TestEvent > > ( )
482493 }
494+
495+ #[ derive( PartialEq , Eq , Debug ) ]
496+ struct E ( usize ) ;
497+
498+ fn events_clear_and_read_impl ( clear_func : impl FnOnce ( & mut Events < E > ) ) {
499+ let mut events = Events :: < E > :: default ( ) ;
500+ let mut reader = events. get_reader ( ) ;
501+
502+ assert ! ( reader. iter( & events) . next( ) . is_none( ) ) ;
503+
504+ events. send ( E ( 0 ) ) ;
505+ assert_eq ! ( * reader. iter( & events) . next( ) . unwrap( ) , E ( 0 ) ) ;
506+ assert_eq ! ( reader. iter( & events) . next( ) , None ) ;
507+
508+ events. send ( E ( 1 ) ) ;
509+ clear_func ( & mut events) ;
510+ assert ! ( reader. iter( & events) . next( ) . is_none( ) ) ;
511+
512+ events. send ( E ( 2 ) ) ;
513+ events. update ( ) ;
514+ events. send ( E ( 3 ) ) ;
515+
516+ assert ! ( reader. iter( & events) . eq( [ E ( 2 ) , E ( 3 ) ] . iter( ) ) ) ;
517+ }
518+
519+ #[ test]
520+ fn test_events_clear_and_read ( ) {
521+ events_clear_and_read_impl ( |events| events. clear ( ) ) ;
522+ }
523+
524+ #[ test]
525+ fn test_events_drain_and_read ( ) {
526+ events_clear_and_read_impl ( |events| {
527+ assert ! ( events. drain( ) . eq( vec![ E ( 0 ) , E ( 1 ) ] . into_iter( ) ) ) ;
528+ } ) ;
529+ }
483530}
0 commit comments