@@ -697,3 +697,63 @@ fn test_span_multiple_start_offset_slicing() {
697
697
assert_eq! (result3 , " def" , " third slice" );
698
698
}
699
699
700
+ #[test]
701
+ fn test_span_at_and_index () {
702
+ // Test simple access.
703
+ let ba : ByteArray = " AB" ;
704
+ let span = ba . span ();
705
+ assert_eq! (span . at (0 ), Some (' A' ));
706
+ assert_eq! (span . at (1 ), Some (' B' ));
707
+ assert_eq! (span . at (2 ), None );
708
+
709
+ // Test index operator on same span.
710
+ assert_eq! (span [0 ], ' A' );
711
+ assert_eq! (span [1 ], ' B' );
712
+
713
+ // Test with offset and two words.
714
+ let ba_33 : ByteArray = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg" ;
715
+ let mut span = ba_33 . span ();
716
+ span = span . slice (1 , 32 ). unwrap ();
717
+ assert_eq! (span . at (0 ), Option :: Some (' B' ));
718
+ assert_eq! (span . at (30 ), Option :: Some (' f' ));
719
+ assert_eq! (span . at (31 ), Option :: Some (' g' ));
720
+ assert_eq! (span . at (32 ), Option :: None );
721
+
722
+ // Test with offset and two words.
723
+ // 64 bytes: 31 + 31 + 2.
724
+ let ba_64 : ByteArray = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789#$" ;
725
+ let mut span = ba_64 . span ();
726
+ span = span . slice (1 , 63 ). unwrap ();
727
+ assert_eq! (span . at (30 ), Some (' f' ), " byte 30 - last of 1nd word" );
728
+ assert_eq! (span . at (31 ), Some (' g' ), " byte 31 - first of 2nd word" );
729
+ assert_eq! (span . at (60 ), Some (' 9' ), " byte 60 - last of 2nd word" );
730
+ assert_eq! (span . at (61 ), Some (' #' ), " byte 61 - first in last_word" );
731
+ assert_eq! (span . at (62 ), Some (' $' ), " byte 62 - last in last_word" );
732
+ assert_eq! (span . at (63 ), None );
733
+
734
+ // Test empty span.
735
+ let empty : ByteArray = Default :: default ();
736
+ let empty_span = empty . span ();
737
+ assert_eq! (empty_span . at (0 ), None );
738
+ }
739
+
740
+ #[test]
741
+ #[should_panic(expected: (' Index out of bounds' ,))]
742
+ fn test_span_index_out_of_bounds () {
743
+ let ba : ByteArray = " AB" ;
744
+ let span = ba . span ();
745
+ let _x = span [2 ]; // Should panic
746
+ }
747
+
748
+ #[test]
749
+ fn test_span_at_overflows () {
750
+ // Test overflow protection with large indices.
751
+ let ba : ByteArray = " test" ;
752
+ let span = ba . span ();
753
+
754
+ assert_eq! (span . at (Bounded :: <usize >:: MAX ), None );
755
+
756
+ let sliced = ba . span (). slice (1 , 3 ). unwrap ();
757
+ assert_eq! (sliced . at (Bounded :: <usize >:: MAX - 1 ), None );
758
+ assert_eq! (sliced . at (Bounded :: <usize >:: MAX ), None );
759
+ }
0 commit comments