aboutsummaryrefslogtreecommitdiff
path: root/src/bytes.rs
diff options
context:
space:
mode:
authorGravatar Sean McArthur <sean@seanmonstar.com> 2019-11-13 14:55:25 -0800
committerGravatar GitHub <noreply@github.com> 2019-11-13 14:55:25 -0800
commit9a10addb444314f48ddae96958e7b0951b907012 (patch)
tree85548001dcda3263c0675b633390abf229797895 /src/bytes.rs
parentb32f6298e289958986b68982788562f3c097f8fc (diff)
downloadbytes-9a10addb444314f48ddae96958e7b0951b907012.tar.gz
bytes-9a10addb444314f48ddae96958e7b0951b907012.tar.zst
bytes-9a10addb444314f48ddae96958e7b0951b907012.zip
Change loom tests to use cfg(loom) internally (#314)
Diffstat (limited to 'src/bytes.rs')
-rw-r--r--src/bytes.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/bytes.rs b/src/bytes.rs
index e07106f..7b1e1e1 100644
--- a/src/bytes.rs
+++ b/src/bytes.rs
@@ -903,3 +903,36 @@ unsafe fn release_shared(ptr: *mut Shared) {
// Drop the data
Box::from_raw(ptr);
}
+
+// fuzz tests
+#[cfg(all(test, loom))]
+mod fuzz {
+ use std::sync::Arc;
+ use loom::thread;
+
+ use super::Bytes;
+ #[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();
+ });
+ }
+}