#![cfg_attr(docsrs, feature(doc_cfg))]
#![deny(missing_docs)]
mod internal;
pub mod atomicbox;
pub mod barrier;
pub mod broadcast;
pub mod condvar;
pub mod latch;
pub mod mpsc;
pub mod mutex;
pub mod once;
pub mod oneshot;
pub mod rwlock;
pub mod semaphore;
pub mod shutdown;
pub mod singleflight;
pub mod waitgroup;
#[cfg(test)]
fn test_runtime() -> &'static tokio::runtime::Runtime {
use std::sync::OnceLock;
use tokio::runtime::Runtime;
static RT: OnceLock<Runtime> = OnceLock::new();
RT.get_or_init(|| Runtime::new().unwrap())
}
#[cfg(test)]
mod tests {
use crate::barrier::Barrier;
use crate::broadcast;
use crate::condvar::Condvar;
use crate::latch::Latch;
use crate::mpsc;
use crate::mutex::Mutex;
use crate::mutex::MutexGuard;
use crate::once::Once;
use crate::once::OnceCell;
use crate::once::OnceMap;
use crate::oneshot;
use crate::rwlock::RwLock;
use crate::rwlock::RwLockReadGuard;
use crate::rwlock::RwLockWriteGuard;
use crate::semaphore::Semaphore;
use crate::shutdown::ShutdownRecv;
use crate::shutdown::ShutdownSend;
use crate::singleflight;
use crate::waitgroup::Wait;
use crate::waitgroup::WaitGroup;
#[test]
fn assert_send_and_sync() {
fn do_assert_send_and_sync<T: Send + Sync>() {}
do_assert_send_and_sync::<Barrier>();
do_assert_send_and_sync::<Condvar>();
do_assert_send_and_sync::<Once>();
do_assert_send_and_sync::<OnceCell<u32>>();
do_assert_send_and_sync::<OnceMap<String, u32>>();
do_assert_send_and_sync::<singleflight::Group<String, u32>>();
do_assert_send_and_sync::<Latch>();
do_assert_send_and_sync::<Semaphore>();
do_assert_send_and_sync::<ShutdownSend>();
do_assert_send_and_sync::<ShutdownRecv>();
do_assert_send_and_sync::<WaitGroup>();
do_assert_send_and_sync::<Mutex<i64>>();
do_assert_send_and_sync::<MutexGuard<'_, i64>>();
do_assert_send_and_sync::<RwLock<i64>>();
do_assert_send_and_sync::<RwLockReadGuard<'_, i64>>();
do_assert_send_and_sync::<RwLockWriteGuard<'_, i64>>();
do_assert_send_and_sync::<broadcast::overflow::Sender<i64>>();
do_assert_send_and_sync::<broadcast::overflow::Receiver<i64>>();
do_assert_send_and_sync::<broadcast::overflow::RecvError>();
do_assert_send_and_sync::<broadcast::overflow::TryRecvError>();
do_assert_send_and_sync::<oneshot::SendError<i64>>();
do_assert_send_and_sync::<oneshot::Sender<i64>>();
do_assert_send_and_sync::<mpsc::SendError<i64>>();
do_assert_send_and_sync::<mpsc::UnboundedSender<i64>>();
do_assert_send_and_sync::<mpsc::UnboundedReceiver<i64>>();
do_assert_send_and_sync::<mpsc::BoundedSender<i64>>();
do_assert_send_and_sync::<mpsc::BoundedReceiver<i64>>();
}
#[test]
fn assert_send() {
fn do_assert_send<T: Send>() {}
do_assert_send::<oneshot::Receiver<i64>>();
do_assert_send::<oneshot::Recv<i64>>();
}
#[test]
fn assert_unpin() {
fn do_assert_unpin<T: Unpin>() {}
do_assert_unpin::<Barrier>();
do_assert_unpin::<Condvar>();
do_assert_unpin::<Latch>();
do_assert_unpin::<Once>();
do_assert_unpin::<OnceCell<u32>>();
do_assert_unpin::<OnceMap<String, u32>>();
do_assert_unpin::<singleflight::Group<String, u32>>();
do_assert_unpin::<Semaphore>();
do_assert_unpin::<ShutdownSend>();
do_assert_unpin::<ShutdownRecv>();
do_assert_unpin::<WaitGroup>();
do_assert_unpin::<Wait>();
do_assert_unpin::<Mutex<i64>>();
do_assert_unpin::<MutexGuard<'_, i64>>();
do_assert_unpin::<RwLock<i64>>();
do_assert_unpin::<RwLockReadGuard<'_, i64>>();
do_assert_unpin::<RwLockWriteGuard<'_, i64>>();
do_assert_unpin::<broadcast::overflow::Sender<i64>>();
do_assert_unpin::<broadcast::overflow::Receiver<i64>>();
do_assert_unpin::<broadcast::overflow::RecvError>();
do_assert_unpin::<broadcast::overflow::TryRecvError>();
do_assert_unpin::<oneshot::Sender<i64>>();
do_assert_unpin::<oneshot::SendError<i64>>();
do_assert_unpin::<oneshot::Receiver<i64>>();
do_assert_unpin::<oneshot::Recv<i64>>();
do_assert_unpin::<mpsc::SendError<i64>>();
do_assert_unpin::<mpsc::UnboundedSender<i64>>();
do_assert_unpin::<mpsc::UnboundedReceiver<i64>>();
do_assert_unpin::<mpsc::BoundedSender<i64>>();
do_assert_unpin::<mpsc::BoundedReceiver<i64>>();
}
}