#[tokio::test] #[cfg(feature = "full")] asyncfn stress_test() { let sem = Arc::new(Semaphore::new(5)); letmut join_handles = Vec::new(); for _ in0..1000 { let sem_clone = sem.clone();
join_handles.push(tokio::spawn(asyncmove { let _p = sem_clone.acquire().await;
}));
} for j in join_handles {
j.await.unwrap();
} // there should be exactly 5 semaphores available now let _p1 = sem.try_acquire().unwrap(); let _p2 = sem.try_acquire().unwrap(); let _p3 = sem.try_acquire().unwrap(); let _p4 = sem.try_acquire().unwrap(); let _p5 = sem.try_acquire().unwrap();
assert!(sem.try_acquire().is_err());
}
#[test] fn add_max_amount_permits() { let s = tokio::sync::Semaphore::new(0);
s.add_permits(tokio::sync::Semaphore::MAX_PERMITS);
assert_eq!(s.available_permits(), tokio::sync::Semaphore::MAX_PERMITS);
}
#[cfg(not(target_family = "wasm"))] // wasm currently doesn't support unwinding #[test] #[should_panic] fn add_more_than_max_amount_permits1() { let s = tokio::sync::Semaphore::new(1);
s.add_permits(tokio::sync::Semaphore::MAX_PERMITS);
}
#[cfg(not(target_family = "wasm"))] // wasm currently doesn't support unwinding #[test] #[should_panic] fn add_more_than_max_amount_permits2() { let s = Semaphore::new(Semaphore::MAX_PERMITS - 1);
s.add_permits(1);
s.add_permits(1);
}
#[cfg(not(target_family = "wasm"))] // wasm currently doesn't support unwinding #[test] #[should_panic] fn panic_when_exceeds_maxpermits() { let _ = Semaphore::new(Semaphore::MAX_PERMITS + 1);
}
#[test] fn no_panic_at_maxpermits() { let _ = Semaphore::new(Semaphore::MAX_PERMITS); let s = Semaphore::new(Semaphore::MAX_PERMITS - 1);
s.add_permits(1);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-20)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.