@@ -522,3 +522,64 @@ def test_window() -> None:
522522 assert [0 , 1 , 2 ] == list (win )
523523 win = buffer .window (dt (0 ), dt (3 ), force_copy = False )
524524 assert [0 , 1 , 2 ] == list (win )
525+
526+
527+ def test_wrapped_buffer_window () -> None :
528+ """Test the wrapped buffer window function."""
529+ wbw = OrderedRingBuffer ._wrapped_buffer_window # pylint: disable=protected-access
530+
531+ #
532+ # Tests for list buffer
533+ #
534+ buffer = [0.0 , 1.0 , 2.0 , 3.0 , 4.0 ]
535+ # start = end
536+ assert [0 , 1 , 2 , 3 , 4 ] == wbw (buffer , 0 , 0 , force_copy = False )
537+ assert [4 , 0 , 1 , 2 , 3 ] == wbw (buffer , 4 , 4 , force_copy = False )
538+ # start < end
539+ assert [0 ] == wbw (buffer , 0 , 1 , force_copy = False )
540+ assert [0 , 1 , 2 , 3 , 4 ] == wbw (buffer , 0 , 5 , force_copy = False )
541+ # start > end, end = 0
542+ assert [4 ] == wbw (buffer , 4 , 0 , force_copy = False )
543+ # start > end, end > 0
544+ assert [4 , 0 , 1 ] == wbw (buffer , 4 , 2 , force_copy = False )
545+
546+ # Lists are always shallow copies
547+ res_copy = wbw (buffer , 0 , 5 , force_copy = False )
548+ assert [0 , 1 , 2 , 3 , 4 ] == res_copy
549+ buffer [0 ] = 9
550+ assert [0 , 1 , 2 , 3 , 4 ] == res_copy
551+
552+ #
553+ # Tests for array buffer
554+ #
555+ buffer = np .array ([0 , 1 , 2 , 3 , 4 ]) # type: ignore
556+ # start = end
557+ assert [0 , 1 , 2 , 3 , 4 ] == list (wbw (buffer , 0 , 0 , force_copy = False ))
558+ assert [4 , 0 , 1 , 2 , 3 ] == list (wbw (buffer , 4 , 4 , force_copy = False ))
559+ # start < end
560+ assert [0 ] == list (wbw (buffer , 0 , 1 , force_copy = False ))
561+ assert [0 , 1 , 2 , 3 , 4 ] == list (wbw (buffer , 0 , 5 , force_copy = False ))
562+ # start > end, end = 0
563+ assert [4 ] == list (wbw (buffer , 4 , 0 , force_copy = False ))
564+ # start > end, end > 0
565+ assert [4 , 0 , 1 ] == list (wbw (buffer , 4 , 2 , force_copy = False ))
566+
567+ # Get a view and a copy before modifying the buffer
568+ res1_view = wbw (buffer , 3 , 5 , force_copy = False )
569+ res1_copy = wbw (buffer , 3 , 5 , force_copy = True )
570+ res2_view = wbw (buffer , 3 , 0 , force_copy = False )
571+ res2_copy = wbw (buffer , 3 , 0 , force_copy = True )
572+ res3_copy = wbw (buffer , 4 , 1 , force_copy = False )
573+ assert [3 , 4 ] == list (res1_view )
574+ assert [3 , 4 ] == list (res1_copy )
575+ assert [3 , 4 ] == list (res2_view )
576+ assert [3 , 4 ] == list (res2_copy )
577+ assert [4 , 0 ] == list (res3_copy )
578+
579+ # Modify the buffer and check that only the view is updated
580+ buffer [4 ] = 9
581+ assert [3 , 9 ] == list (res1_view )
582+ assert [3 , 4 ] == list (res1_copy )
583+ assert [3 , 9 ] == list (res2_view )
584+ # assert [3, 4] == list(res2_copy) #Fails because of a bug
585+ assert [4 , 0 ] == list (res3_copy )
0 commit comments