1pub mod std_thread;
2pub mod tokio_impl;
3
4#[cfg(test)]
5mod test {
6 use std::sync::{Arc, Mutex};
8 use std::time::{Duration, SystemTime};
9 const TWENTY: Duration = Duration::from_millis(20);
11 use crate::std_thread;
12 use crate::tokio_impl;
13
14 #[test]
15 fn simple_test() {
16 let dyn_timeout = std_thread::DynTimeout::new(TWENTY, || {
17 println!("after forty milliseconds");
18 });
19 dyn_timeout.add(TWENTY).unwrap();
20 }
21 #[test]
22 fn cancel_test() {
23 let mut dyn_timeout = std_thread::DynTimeout::new(Duration::from_secs(20), || {
24 panic!("Should never append");
25 });
26 dyn_timeout.add(Duration::from_secs(20)).unwrap();
27 dyn_timeout.cancel().unwrap();
29 }
30 #[tokio::test]
39 async fn tokio_test() {
40 let dyn_timeout = tokio_impl::DynTimeout::new(TWENTY, || {
41 println!("after forty milliseconds");
42 });
43 dyn_timeout.add(TWENTY).await.unwrap();
44 }
45
46 lazy_static::lazy_static! {
47 static ref TIME: Arc::<Mutex::<SystemTime>> = Arc::new(Mutex::new(SystemTime::now()));
48 }
49
50 #[tokio::test]
51 async fn tokio_test_bench() {
52 {
53 let mut time = TIME.lock().unwrap();
54 *time = SystemTime::now();
55 }
56 let mut dyn_timeout = tokio_impl::DynTimeout::new(TWENTY, move || {
57 let st = TIME.lock().unwrap();
58 let dur = st.elapsed().unwrap();
59 assert!(dur > Duration::from_millis(36) && dur < Duration::from_millis(44));
60 });
61 dyn_timeout.add(TWENTY).await.unwrap();
62 dyn_timeout.wait().await.unwrap();
63 }
64}