From 64d73866aeda3a3567ad03e8cacf8b86acd748a2 Mon Sep 17 00:00:00 2001 From: Jules Bertholet Date: Fri, 26 May 2023 11:32:06 -0400 Subject: [PATCH] Add test for `add_permits` --- tests/semaphore.rs | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/tests/semaphore.rs b/tests/semaphore.rs index d3d6d5f..053d6c8 100644 --- a/tests/semaphore.rs +++ b/tests/semaphore.rs @@ -1,4 +1,8 @@ -use std::sync::{mpsc, Arc}; +use std::mem::forget; +use std::sync::{ + atomic::{AtomicUsize, Ordering}, + mpsc, Arc, +}; use std::thread; use async_lock::Semaphore; @@ -92,3 +96,34 @@ fn lifetime() { mutex.acquire_arc() }; } + +#[test] +fn add_permits() { + static COUNTER: AtomicUsize = AtomicUsize::new(0); + + let s = Arc::new(Semaphore::new(0)); + let (tx, rx) = mpsc::channel::<()>(); + + for _ in 0..50 { + let s = s.clone(); + let tx = tx.clone(); + + thread::spawn(move || { + future::block_on(async { + let perm = s.acquire().await; + forget(perm); + COUNTER.fetch_add(1, Ordering::Relaxed); + drop(tx); + }) + }); + } + + assert_eq!(COUNTER.load(Ordering::Relaxed), 0); + + s.add_permits(50); + + drop(tx); + let _ = rx.recv(); + + assert_eq!(COUNTER.load(Ordering::Relaxed), 50); +}