use std::sync::{
atomic::{AtomicUsize, Ordering},
Arc,
};
use tokio::{
spawn,
time::{sleep, Duration},
};
use wg::future::WaitGroup;
#[tokio::main]
async fn main() {
let wg = WaitGroup::new();
let ctr = Arc::new(AtomicUsize::new(0));
for _ in 0..5 {
let ctrx = ctr.clone();
let t_wg = wg.add(1);
spawn(async move {
sleep(Duration::from_millis(50)).await;
ctrx.fetch_add(1, Ordering::Relaxed);
t_wg.done();
});
}
wg.wait().await;
assert_eq!(ctr.load(Ordering::Relaxed), 5);
}