@@ -602,5 +602,55 @@ def rolling_window_with_custom_data_type():
602602 Assert . AreEqual ( expectedValue , value ) ;
603603 }
604604 }
605+
606+ [ TestCase ( 2 , 3 , 5 , new [ ] { 3 , 2 } ) ]
607+ [ TestCase ( 5 , 7 , 3 , new [ ] { 7 , 6 , 5 } ) ]
608+ [ TestCase ( 3 , 6 , 2 , new [ ] { 6 , 5 } ) ]
609+ [ TestCase ( 3 , 6 , 5 , new [ ] { 6 , 5 , 4 } ) ]
610+ public void ResizeFromOverwrittenWindowPreservesNewestElements ( int initialSize , int totalAdds , int newSize , int [ ] expected )
611+ {
612+ var window = new RollingWindow < int > ( initialSize ) ;
613+ for ( var i = 1 ; i <= totalAdds ; i ++ )
614+ {
615+ window . Add ( i ) ;
616+ }
617+
618+ window . Size = newSize ;
619+
620+ for ( var i = 0 ; i < expected . Length ; i ++ )
621+ {
622+ Assert . AreEqual ( expected [ i ] , window [ i ] ) ;
623+ }
624+ }
625+
626+ [ Test ]
627+ public void MultipleResizesOnOverwrittenWindowPreserveElementOrder ( )
628+ {
629+ var window = new RollingWindow < int > ( 5 ) ;
630+ for ( var i = 1 ; i <= 7 ; i ++ )
631+ {
632+ window . Add ( i ) ;
633+ }
634+
635+ window . Size = 3 ;
636+ Assert . AreEqual ( 7 , window [ 0 ] ) ;
637+ Assert . AreEqual ( 6 , window [ 1 ] ) ;
638+ Assert . AreEqual ( 5 , window [ 2 ] ) ;
639+
640+ window . Size = 10 ;
641+ Assert . AreEqual ( 7 , window [ 0 ] ) ;
642+ Assert . AreEqual ( 6 , window [ 1 ] ) ;
643+ Assert . AreEqual ( 5 , window [ 2 ] ) ;
644+
645+ for ( var i = 8 ; i <= 17 ; i ++ )
646+ {
647+ window . Add ( i ) ;
648+ }
649+
650+ Assert . AreEqual ( 17 , window [ 0 ] ) ;
651+ Assert . AreEqual ( 16 , window [ 1 ] ) ;
652+ Assert . AreEqual ( 15 , window [ 2 ] ) ;
653+ Assert . AreEqual ( 8 , window [ 9 ] ) ;
654+ }
605655 }
606656}
0 commit comments