@@ -452,3 +452,64 @@ def test_window() -> None:
452452 assert [0 , 1 , 2 ] == list (win )
453453 win = buffer .window (dt (0 ), dt (3 ), force_copy = False )
454454 assert [0 , 1 , 2 ] == list (win )
455+
456+
457+ def test_wrapped_buffer_window () -> None :
458+ """Test the wrapped buffer window function."""
459+ wbw = OrderedRingBuffer ._wrapped_buffer_window # pylint: disable=protected-access
460+
461+ #
462+ # Tests for list buffer
463+ #
464+ buffer = [0.0 , 1.0 , 2.0 , 3.0 , 4.0 ]
465+ # start = end
466+ assert [0 , 1 , 2 , 3 , 4 ] == wbw (buffer , 0 , 0 , force_copy = False )
467+ assert [4 , 0 , 1 , 2 , 3 ] == wbw (buffer , 4 , 4 , force_copy = False )
468+ # start < end
469+ assert [0 ] == wbw (buffer , 0 , 1 , force_copy = False )
470+ assert [0 , 1 , 2 , 3 , 4 ] == wbw (buffer , 0 , 5 , force_copy = False )
471+ # start > end, end = 0
472+ assert [4 ] == wbw (buffer , 4 , 0 , force_copy = False )
473+ # start > end, end > 0
474+ assert [4 , 0 , 1 ] == wbw (buffer , 4 , 2 , force_copy = False )
475+
476+ # Lists are always shallow copies
477+ res_copy = wbw (buffer , 0 , 5 , force_copy = False )
478+ assert [0 , 1 , 2 , 3 , 4 ] == res_copy
479+ buffer [0 ] = 9
480+ assert [0 , 1 , 2 , 3 , 4 ] == res_copy
481+
482+ #
483+ # Tests for array buffer
484+ #
485+ buffer = np .array ([0 , 1 , 2 , 3 , 4 ]) # type: ignore
486+ # start = end
487+ assert [0 , 1 , 2 , 3 , 4 ] == list (wbw (buffer , 0 , 0 , force_copy = False ))
488+ assert [4 , 0 , 1 , 2 , 3 ] == list (wbw (buffer , 4 , 4 , force_copy = False ))
489+ # start < end
490+ assert [0 ] == list (wbw (buffer , 0 , 1 , force_copy = False ))
491+ assert [0 , 1 , 2 , 3 , 4 ] == list (wbw (buffer , 0 , 5 , force_copy = False ))
492+ # start > end, end = 0
493+ assert [4 ] == list (wbw (buffer , 4 , 0 , force_copy = False ))
494+ # start > end, end > 0
495+ assert [4 , 0 , 1 ] == list (wbw (buffer , 4 , 2 , force_copy = False ))
496+
497+ # Get a view and a copy before modifying the buffer
498+ res1_view = wbw (buffer , 3 , 5 , force_copy = False )
499+ res1_copy = wbw (buffer , 3 , 5 , force_copy = True )
500+ res2_view = wbw (buffer , 3 , 0 , force_copy = False )
501+ res2_copy = wbw (buffer , 3 , 0 , force_copy = True )
502+ res3_copy = wbw (buffer , 4 , 1 , force_copy = False )
503+ assert [3 , 4 ] == list (res1_view )
504+ assert [3 , 4 ] == list (res1_copy )
505+ assert [3 , 4 ] == list (res2_view )
506+ assert [3 , 4 ] == list (res2_copy )
507+ assert [4 , 0 ] == list (res3_copy )
508+
509+ # Modify the buffer and check that only the view is updated
510+ buffer [4 ] = 9
511+ assert [3 , 9 ] == list (res1_view )
512+ assert [3 , 4 ] == list (res1_copy )
513+ assert [3 , 9 ] == list (res2_view )
514+ # assert [3, 4] == list(res2_copy) #Fails because of a bug
515+ assert [4 , 0 ] == list (res3_copy )
0 commit comments