aboutsummaryrefslogtreecommitdiff
path: root/rtic-arbiter
diff options
context:
space:
mode:
authorEmil Fresk <emil.fresk@gmail.com>2023-01-30 21:24:12 +0100
committerHenrik Tjäder <henrik@tjaders.com>2023-03-01 00:33:38 +0100
commitf2e0cd342ee11ab1a2e480b67a1a91d3b277932b (patch)
tree1736e51dfe1e594f91a936754d51ded6479511c1 /rtic-arbiter
parent5c1cefbf4e249c38467e3f6eb4e061e5b8073d6c (diff)
Added testing to rtic-arbiter
Diffstat (limited to 'rtic-arbiter')
-rw-r--r--rtic-arbiter/src/lib.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/rtic-arbiter/src/lib.rs b/rtic-arbiter/src/lib.rs
index 487c64c..519ce2c 100644
--- a/rtic-arbiter/src/lib.rs
+++ b/rtic-arbiter/src/lib.rs
@@ -36,6 +36,9 @@ pub struct Arbiter<T> {
taken: AtomicBool,
}
+unsafe impl<T> Send for Arbiter<T> {}
+unsafe impl<T> Sync for Arbiter<T> {}
+
impl<T> Arbiter<T> {
/// Create a new arbiter.
pub const fn new(inner: T) -> Self {
@@ -171,5 +174,25 @@ extern crate std;
#[cfg(test)]
mod tests {
- // use super::*;
+ use super::*;
+
+ #[tokio::test]
+ async fn stress_channel() {
+ const NUM_RUNS: usize = 100_000;
+
+ static ARB: Arbiter<usize> = Arbiter::new(0);
+ let mut v = std::vec::Vec::new();
+
+ for _ in 0..NUM_RUNS {
+ v.push(tokio::spawn(async move {
+ *ARB.access().await += 1;
+ }));
+ }
+
+ for v in v {
+ v.await.unwrap();
+ }
+
+ assert_eq!(*ARB.access().await, NUM_RUNS)
+ }
}