Add zero-copy make_mut (#695)

This commit is contained in:
Émile Fugulin
2024-05-05 17:58:00 +02:00
committed by GitHub
parent 0c17e99283
commit 86694b0564
4 changed files with 341 additions and 2 deletions
+50
View File
@@ -95,3 +95,53 @@ fn test_bytes_into_vec() {
assert_eq!(Vec::from(b2), vec[20..]);
assert_eq!(Vec::from(b1), vec[..20]);
}
#[test]
fn test_bytes_make_mut_vec() {
let vec = vec![33u8; 1024];
// Test case where kind == KIND_VEC
let b1 = Bytes::from(vec.clone());
let b1m = b1.make_mut();
assert_eq!(b1m, vec);
}
#[test]
fn test_bytes_make_mut_arc_1() {
let vec = vec![33u8; 1024];
// Test case where kind == KIND_ARC, ref_cnt == 1
let b1 = Bytes::from(vec.clone());
drop(b1.clone());
let b1m = b1.make_mut();
assert_eq!(b1m, vec);
}
#[test]
fn test_bytes_make_mut_arc_2() {
let vec = vec![33u8; 1024];
// Test case where kind == KIND_ARC, ref_cnt == 2
let b1 = Bytes::from(vec.clone());
let b2 = b1.clone();
let b1m = b1.make_mut();
assert_eq!(b1m, vec);
// Test case where vtable = SHARED_VTABLE, kind == KIND_ARC, ref_cnt == 1
let b2m = b2.make_mut();
assert_eq!(b2m, vec);
}
#[test]
fn test_bytes_make_mut_arc_offset() {
let vec = vec![33u8; 1024];
// Test case where offset != 0
let mut b1 = Bytes::from(vec.clone());
let b2 = b1.split_off(20);
let b1m = b1.make_mut();
let b2m = b2.make_mut();
assert_eq!(b2m, vec[20..]);
assert_eq!(b1m, vec[..20]);
}