summaryrefslogtreecommitdiffstats
path: root/third_party/rust/oneshot-uniffi/tests/helpers/mod.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/rust/oneshot-uniffi/tests/helpers/mod.rs
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/oneshot-uniffi/tests/helpers/mod.rs')
-rw-r--r--third_party/rust/oneshot-uniffi/tests/helpers/mod.rs63
1 files changed, 63 insertions, 0 deletions
diff --git a/third_party/rust/oneshot-uniffi/tests/helpers/mod.rs b/third_party/rust/oneshot-uniffi/tests/helpers/mod.rs
new file mode 100644
index 0000000000..1b145396e7
--- /dev/null
+++ b/third_party/rust/oneshot-uniffi/tests/helpers/mod.rs
@@ -0,0 +1,63 @@
+#![allow(dead_code)]
+
+extern crate alloc;
+
+#[cfg(not(loom))]
+use alloc::sync::Arc;
+#[cfg(not(loom))]
+use core::sync::atomic::{AtomicUsize, Ordering::SeqCst};
+#[cfg(loom)]
+use loom::sync::{
+ atomic::{AtomicUsize, Ordering::SeqCst},
+ Arc,
+};
+
+#[cfg(loom)]
+pub mod waker;
+
+pub fn maybe_loom_model(test: impl Fn() + Sync + Send + 'static) {
+ #[cfg(loom)]
+ loom::model(test);
+ #[cfg(not(loom))]
+ test();
+}
+
+pub struct DropCounter<T> {
+ drop_count: Arc<AtomicUsize>,
+ value: Option<T>,
+}
+
+pub struct DropCounterHandle(Arc<AtomicUsize>);
+
+impl<T> DropCounter<T> {
+ pub fn new(value: T) -> (Self, DropCounterHandle) {
+ let drop_count = Arc::new(AtomicUsize::new(0));
+ (
+ Self {
+ drop_count: drop_count.clone(),
+ value: Some(value),
+ },
+ DropCounterHandle(drop_count),
+ )
+ }
+
+ pub fn value(&self) -> &T {
+ self.value.as_ref().unwrap()
+ }
+
+ pub fn into_value(mut self) -> T {
+ self.value.take().unwrap()
+ }
+}
+
+impl DropCounterHandle {
+ pub fn count(&self) -> usize {
+ self.0.load(SeqCst)
+ }
+}
+
+impl<T> Drop for DropCounter<T> {
+ fn drop(&mut self) {
+ self.drop_count.fetch_add(1, SeqCst);
+ }
+}