}
}
+#[test]
+fn test_str_slicemut_rangetoinclusive_ok() {
+ let mut s = "abcαβγ".to_owned();
+ let s: &mut str = &mut s;
+ &mut s[..=3]; // before alpha
+ &mut s[..=5]; // after alpha
+}
+
+#[test]
+#[should_panic]
+fn test_str_slicemut_rangetoinclusive_notok() {
+ let mut s = "abcαβγ".to_owned();
+ let s: &mut str = &mut s;
+ &mut s[..=4]; // middle of alpha, which is 2 bytes long
+}
+
#[test]
fn test_is_char_boundary() {
let s = "ศไทย中华Việt Nam β-release 🐱123";
fn index(self, slice: &str) -> &Self::Output {
assert!(self.end != usize::max_value(),
"attempted to index str up to maximum usize");
- let end = self.end + 1;
- self.get(slice).unwrap_or_else(|| super::slice_error_fail(slice, 0, end))
+ (..self.end+1).index(slice)
}
#[inline]
fn index_mut(self, slice: &mut str) -> &mut Self::Output {
assert!(self.end != usize::max_value(),
"attempted to index str up to maximum usize");
- if slice.is_char_boundary(self.end) {
- unsafe { self.get_unchecked_mut(slice) }
- } else {
- super::slice_error_fail(slice, 0, self.end + 1)
- }
+ (..self.end+1).index_mut(slice)
}
}