diff --git a/library/core/tests/waker.rs b/library/core/tests/waker.rs index 2c66e0d7ad3a4..baa8b82c192d3 100644 --- a/library/core/tests/waker.rs +++ b/library/core/tests/waker.rs @@ -1,5 +1,7 @@ -use std::ptr; -use std::task::{RawWaker, RawWakerVTable, Waker}; +use core::future::{ready, Future}; +use core::pin::Pin; +use core::ptr; +use core::task::{Context, Poll, RawWaker, RawWakerVTable, Waker}; #[test] fn test_waker_getters() { @@ -20,3 +22,27 @@ static WAKER_VTABLE: RawWakerVTable = RawWakerVTable::new( |_| {}, |_| {}, ); + + +const NOP_RAWWAKER: RawWaker = { + fn nop(_: *const ()) {} + const VTAB: RawWakerVTable = RawWakerVTable::new(|_| NOP_RAWWAKER, nop, nop, nop); + RawWaker::new(&() as *const (), &VTAB) +}; + +const NOP_WAKER: &Waker = &unsafe { Waker::from_raw(NOP_RAWWAKER) }; + +const NOP_CONTEXT: Context<'static> = Context::from_waker(NOP_WAKER); + +fn poll_once(f: &mut F) -> Poll +where + F: Future + ?Sized + Unpin, +{ + let mut cx = NOP_CONTEXT; + Pin::new(f).as_mut().poll(&mut cx) +} + +#[test] +fn test_const_waker() { + assert_eq!(poll_once(&mut ready(1)), Poll::Ready(1)); +}