diff options
Diffstat (limited to 'tests/fuzz_bytes.rs')
-rw-r--r-- | tests/fuzz_bytes.rs | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/fuzz_bytes.rs b/tests/fuzz_bytes.rs new file mode 100644 index 0000000..5f894dd --- /dev/null +++ b/tests/fuzz_bytes.rs @@ -0,0 +1,73 @@ +// pretend to like `crate::` +extern crate alloc; +#[path = "../src/buf/mod.rs"] +#[allow(warnings)] +mod buf; +#[path = "../src/debug.rs"] +#[allow(warnings)] +mod debug; +#[path = "../src/bytes.rs"] +#[allow(warnings)] +mod bytes; +#[path = "../src/bytes_mut.rs"] +#[allow(warnings)] +mod bytes_mut; +use std::process::abort; + +use self::buf::{Buf, BufMut}; +use self::bytes::Bytes; +use self::bytes_mut::BytesMut; + +use std::sync::Arc; +use loom; +use loom::thread; + +#[test] +fn bytes_cloning_vec() { + loom::model(|| { + let a = Bytes::from(b"abcdefgh".to_vec()); + let addr = a.as_ptr() as usize; + + // test the Bytes::clone is Sync by putting it in an Arc + let a1 = Arc::new(a); + let a2 = a1.clone(); + + let t1 = thread::spawn(move || { + let b: Bytes = (*a1).clone(); + assert_eq!(b.as_ptr() as usize, addr); + }); + + let t2 = thread::spawn(move || { + let b: Bytes = (*a2).clone(); + assert_eq!(b.as_ptr() as usize, addr); + }); + + t1.join().unwrap(); + t2.join().unwrap(); + }); +} + +#[test] +fn bytes_mut_cloning_frozen() { + loom::model(|| { + let a = BytesMut::from(&b"abcdefgh"[..]).split().freeze(); + let addr = a.as_ptr() as usize; + + // test the Bytes::clone is Sync by putting it in an Arc + let a1 = Arc::new(a); + let a2 = a1.clone(); + + let t1 = thread::spawn(move || { + let b: Bytes = (*a1).clone(); + assert_eq!(b.as_ptr() as usize, addr); + }); + + let t2 = thread::spawn(move || { + let b: Bytes = (*a2).clone(); + assert_eq!(b.as_ptr() as usize, addr); + }); + + t1.join().unwrap(); + t2.join().unwrap(); + }); +} |