@@ -727,3 +727,64 @@ fn test_span_multiple_start_offset_slicing() {
727
727
let result3 : ByteArray = slice3 . to_byte_array ();
728
728
assert_eq! (result3 , " def" , " third slice" );
729
729
}
730
+
731
+ #[test]
732
+ fn test_span_at_and_index () {
733
+ // Test simple access.
734
+ let ba : ByteArray = " AB" ;
735
+ let span = ba . span ();
736
+ assert_eq! (span . at (0 ), Some (' A' ));
737
+ assert_eq! (span . at (1 ), Some (' B' ));
738
+ assert_eq! (span . at (2 ), None );
739
+
740
+ // Test index operator on same span.
741
+ assert_eq! (span [0 ], ' A' );
742
+ assert_eq! (span [1 ], ' B' );
743
+
744
+ // Test with offset and two words.
745
+ let ba_33 : ByteArray = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg" ;
746
+ let mut span = ba_33 . span ();
747
+ span = span . slice (1 , 32 ). unwrap ();
748
+ assert_eq! (span . at (0 ), Option :: Some (' B' ));
749
+ assert_eq! (span . at (30 ), Option :: Some (' f' ));
750
+ assert_eq! (span . at (31 ), Option :: Some (' g' ));
751
+ assert_eq! (span . at (32 ), Option :: None );
752
+
753
+ // Test with offset and two words.
754
+ // 64 bytes: 31 + 31 + 2.
755
+ let ba_64 : ByteArray = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789#$" ;
756
+ let mut span = ba_64 . span ();
757
+ span = span . slice (1 , 63 ). unwrap ();
758
+ assert_eq! (span . at (30 ), Some (' f' ), " byte 30 - last of 1nd word" );
759
+ assert_eq! (span . at (31 ), Some (' g' ), " byte 31 - first of 2nd word" );
760
+ assert_eq! (span . at (60 ), Some (' 9' ), " byte 60 - last of 2nd word" );
761
+ assert_eq! (span . at (61 ), Some (' #' ), " byte 61 - first in last_word" );
762
+ assert_eq! (span . at (62 ), Some (' $' ), " byte 62 - last in last_word" );
763
+ assert_eq! (span . at (63 ), None );
764
+
765
+ // Test empty span.
766
+ let empty : ByteArray = Default :: default ();
767
+ let empty_span = empty . span ();
768
+ assert_eq! (empty_span . at (0 ), None );
769
+ }
770
+
771
+ #[test]
772
+ #[should_panic(expected: (' Index out of bounds' ,))]
773
+ fn test_span_index_out_of_bounds () {
774
+ let ba : ByteArray = " AB" ;
775
+ let span = ba . span ();
776
+ let _x = span [2 ]; // Should panic
777
+ }
778
+
779
+ #[test]
780
+ fn test_span_at_overflows () {
781
+ // Test overflow protection with large indices.
782
+ let ba : ByteArray = " test" ;
783
+ let span = ba . span ();
784
+
785
+ assert_eq! (span . at (Bounded :: <usize >:: MAX ), None );
786
+
787
+ let sliced = ba . span (). slice (1 , 3 ). unwrap ();
788
+ assert_eq! (sliced . at (Bounded :: <usize >:: MAX - 1 ), None );
789
+ assert_eq! (sliced . at (Bounded :: <usize >:: MAX ), None );
790
+ }
0 commit comments