diff options
| author | Emil Fresk <emil.fresk@gmail.com> | 2023-01-30 21:24:12 +0100 |
|---|---|---|
| committer | Henrik Tjäder <henrik@tjaders.com> | 2023-03-01 00:33:38 +0100 |
| commit | f2e0cd342ee11ab1a2e480b67a1a91d3b277932b (patch) | |
| tree | 1736e51dfe1e594f91a936754d51ded6479511c1 /rtic-arbiter | |
| parent | 5c1cefbf4e249c38467e3f6eb4e061e5b8073d6c (diff) | |
Added testing to rtic-arbiter
Diffstat (limited to 'rtic-arbiter')
| -rw-r--r-- | rtic-arbiter/src/lib.rs | 25 |
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) + } } |
