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