@@ -328,14 +328,24 @@ impl<T: Component> Events<T> {
328
328
events. update ( ) ;
329
329
}
330
330
331
+ #[ inline]
332
+ fn reset_start_event_count ( & mut self ) {
333
+ self . a_start_event_count = self . event_count ;
334
+ self . b_start_event_count = self . event_count ;
335
+ }
336
+
331
337
/// Removes all events.
338
+ #[ inline]
332
339
pub fn clear ( & mut self ) {
340
+ self . reset_start_event_count ( ) ;
333
341
self . events_a . clear ( ) ;
334
342
self . events_b . clear ( ) ;
335
343
}
336
344
337
345
/// Creates a draining iterator that removes all events.
338
346
pub fn drain ( & mut self ) -> impl Iterator < Item = T > + ' _ {
347
+ self . reset_start_event_count ( ) ;
348
+
339
349
let map = |i : EventInstance < T > | i. event ;
340
350
match self . state {
341
351
State :: A => self
@@ -480,4 +490,40 @@ mod tests {
480
490
) -> Vec < TestEvent > {
481
491
reader. iter ( events) . cloned ( ) . collect :: < Vec < TestEvent > > ( )
482
492
}
493
+
494
+ #[ derive( PartialEq , Eq , Debug ) ]
495
+ struct E ( usize ) ;
496
+
497
+ fn events_clear_and_read_impl ( clear_func : impl FnOnce ( & mut Events < E > ) ) {
498
+ let mut events = Events :: < E > :: default ( ) ;
499
+ let mut reader = events. get_reader ( ) ;
500
+
501
+ assert ! ( reader. iter( & events) . next( ) . is_none( ) ) ;
502
+
503
+ events. send ( E ( 0 ) ) ;
504
+ assert_eq ! ( * reader. iter( & events) . next( ) . unwrap( ) , E ( 0 ) ) ;
505
+ assert_eq ! ( reader. iter( & events) . next( ) , None ) ;
506
+
507
+ events. send ( E ( 1 ) ) ;
508
+ clear_func ( & mut events) ;
509
+ assert ! ( reader. iter( & events) . next( ) . is_none( ) ) ;
510
+
511
+ events. send ( E ( 2 ) ) ;
512
+ events. update ( ) ;
513
+ events. send ( E ( 3 ) ) ;
514
+
515
+ assert ! ( reader. iter( & events) . eq( [ E ( 2 ) , E ( 3 ) ] . iter( ) ) ) ;
516
+ }
517
+
518
+ #[ test]
519
+ fn test_events_clear_and_read ( ) {
520
+ events_clear_and_read_impl ( |events| events. clear ( ) ) ;
521
+ }
522
+
523
+ #[ test]
524
+ fn test_events_drain_and_read ( ) {
525
+ events_clear_and_read_impl ( |events| {
526
+ assert ! ( events. drain( ) . eq( vec![ E ( 0 ) , E ( 1 ) ] . into_iter( ) ) ) ;
527
+ } ) ;
528
+ }
483
529
}
0 commit comments