Skip to content

Commit 1d0be87

Browse files
committed
add a test for the new Arc-sharing WakerArray
1 parent b396a85 commit 1d0be87

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

src/utils/wakers/array/waker_array.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,43 @@ impl<const N: usize> WakeDataContainer for WakerArrayInner<N> {
7575
}
7676
}
7777
}
78+
79+
#[cfg(test)]
80+
mod tests {
81+
use crate::utils::wakers::dummy_waker;
82+
83+
use super::*;
84+
#[test]
85+
fn check_refcount() {
86+
let mut wa = WakerArray::<5>::new();
87+
assert_eq!(Arc::strong_count(&wa.inner), 6);
88+
wa.wakers[4] = dummy_waker();
89+
assert_eq!(Arc::strong_count(&wa.inner), 5);
90+
let cloned = wa.wakers[3].clone();
91+
assert_eq!(Arc::strong_count(&wa.inner), 6);
92+
wa.wakers[3] = wa.wakers[4].clone();
93+
assert_eq!(Arc::strong_count(&wa.inner), 5);
94+
drop(cloned);
95+
assert_eq!(Arc::strong_count(&wa.inner), 4);
96+
97+
wa.wakers[0].wake_by_ref();
98+
wa.wakers[0].wake_by_ref();
99+
wa.wakers[0].wake_by_ref();
100+
assert_eq!(Arc::strong_count(&wa.inner), 4);
101+
102+
wa.wakers[0] = wa.wakers[1].clone();
103+
assert_eq!(Arc::strong_count(&wa.inner), 4);
104+
105+
let taken = std::mem::replace(&mut wa.wakers[2], dummy_waker());
106+
assert_eq!(Arc::strong_count(&wa.inner), 4);
107+
taken.wake_by_ref();
108+
taken.wake_by_ref();
109+
taken.wake_by_ref();
110+
assert_eq!(Arc::strong_count(&wa.inner), 4);
111+
taken.wake();
112+
assert_eq!(Arc::strong_count(&wa.inner), 3);
113+
114+
wa.wakers = array::from_fn(|_| dummy_waker());
115+
assert_eq!(Arc::strong_count(&wa.inner), 1);
116+
}
117+
}

0 commit comments

Comments
 (0)