dyn_timeout/
lib.rs

1pub mod std_thread;
2pub mod tokio_impl;
3
4#[cfg(test)]
5mod test {
6    //extern crate test;
7    use std::sync::{Arc, Mutex};
8    use std::time::{Duration, SystemTime};
9    //use test::Bencher;
10    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        // this should be cancelled
28        dyn_timeout.cancel().unwrap();
29    }
30    //#[bench]
31    //fn simple_bench(b: &mut Bencher) {
32    //    b.iter(|| {
33    //        std_thread::DynTimeout::new(TWENTY, || {})
34    //            .add(TWENTY)
35    //            .unwrap();
36    //    });
37    //}
38    #[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}