mirror of
https://github.com/tokio-rs/bytes.git
synced 2026-08-25 00:00:22 +02:00
Fix #352 -- Make freeze respect the start offset for BytesMuts in Vec mode
This commit is contained in:
committed by
Sean McArthur
parent
fe6e673864
commit
8bbe9dd87b
+3
-1
@@ -233,7 +233,9 @@ impl BytesMut {
|
|||||||
let (off, _) = self.get_vec_pos();
|
let (off, _) = self.get_vec_pos();
|
||||||
let vec = rebuild_vec(self.ptr.as_ptr(), self.len, self.cap, off);
|
let vec = rebuild_vec(self.ptr.as_ptr(), self.len, self.cap, off);
|
||||||
mem::forget(self);
|
mem::forget(self);
|
||||||
vec.into()
|
let mut b: Bytes = vec.into();
|
||||||
|
b.advance(off);
|
||||||
|
b
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
debug_assert_eq!(self.kind(), KIND_ARC);
|
debug_assert_eq!(self.kind(), KIND_ARC);
|
||||||
|
|||||||
@@ -342,6 +342,72 @@ fn freeze_clone_unique() {
|
|||||||
assert_eq!(c, s);
|
assert_eq!(c, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn freeze_after_advance() {
|
||||||
|
let s = &b"abcdefgh"[..];
|
||||||
|
let mut b = BytesMut::from(s);
|
||||||
|
b.advance(1);
|
||||||
|
assert_eq!(b, s[1..]);
|
||||||
|
let b = b.freeze();
|
||||||
|
// Verify fix for #352. Previously, freeze would ignore the start offset
|
||||||
|
// for BytesMuts in Vec mode.
|
||||||
|
assert_eq!(b, s[1..]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn freeze_after_advance_arc() {
|
||||||
|
let s = &b"abcdefgh"[..];
|
||||||
|
let mut b = BytesMut::from(s);
|
||||||
|
// Make b Arc
|
||||||
|
let _ = b.split_to(0);
|
||||||
|
b.advance(1);
|
||||||
|
assert_eq!(b, s[1..]);
|
||||||
|
let b = b.freeze();
|
||||||
|
assert_eq!(b, s[1..]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn freeze_after_split_to() {
|
||||||
|
let s = &b"abcdefgh"[..];
|
||||||
|
let mut b = BytesMut::from(s);
|
||||||
|
let _ = b.split_to(1);
|
||||||
|
assert_eq!(b, s[1..]);
|
||||||
|
let b = b.freeze();
|
||||||
|
assert_eq!(b, s[1..]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn freeze_after_truncate() {
|
||||||
|
let s = &b"abcdefgh"[..];
|
||||||
|
let mut b = BytesMut::from(s);
|
||||||
|
b.truncate(7);
|
||||||
|
assert_eq!(b, s[..7]);
|
||||||
|
let b = b.freeze();
|
||||||
|
assert_eq!(b, s[..7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn freeze_after_truncate_arc() {
|
||||||
|
let s = &b"abcdefgh"[..];
|
||||||
|
let mut b = BytesMut::from(s);
|
||||||
|
// Make b Arc
|
||||||
|
let _ = b.split_to(0);
|
||||||
|
b.truncate(7);
|
||||||
|
assert_eq!(b, s[..7]);
|
||||||
|
let b = b.freeze();
|
||||||
|
assert_eq!(b, s[..7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn freeze_after_split_off() {
|
||||||
|
let s = &b"abcdefgh"[..];
|
||||||
|
let mut b = BytesMut::from(s);
|
||||||
|
let _ = b.split_off(7);
|
||||||
|
assert_eq!(b, s[..7]);
|
||||||
|
let b = b.freeze();
|
||||||
|
assert_eq!(b, s[..7]);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn fns_defined_for_bytes_mut() {
|
fn fns_defined_for_bytes_mut() {
|
||||||
let mut bytes = BytesMut::from(&b"hello world"[..]);
|
let mut bytes = BytesMut::from(&b"hello world"[..]);
|
||||||
|
|||||||
Reference in New Issue
Block a user