1 use crate::sync::AtomicWaker; 2 use tokio_test::task; 3 4 use std::task::Waker; 5 6 trait AssertSend: Send {} 7 trait AssertSync: Send {} 8 9 impl AssertSend for AtomicWaker {} 10 impl AssertSync for AtomicWaker {} 11 12 impl AssertSend for Waker {} 13 impl AssertSync for Waker {} 14 15 #[test] basic_usage()16fn basic_usage() { 17 let mut waker = task::spawn(AtomicWaker::new()); 18 19 waker.enter(|cx, waker| waker.register_by_ref(cx.waker())); 20 waker.wake(); 21 22 assert!(waker.is_woken()); 23 } 24 25 #[test] wake_without_register()26fn wake_without_register() { 27 let mut waker = task::spawn(AtomicWaker::new()); 28 waker.wake(); 29 30 // Registering should not result in a notification 31 waker.enter(|cx, waker| waker.register_by_ref(cx.waker())); 32 33 assert!(!waker.is_woken()); 34 } 35