blob: ccee2221e2958827823fb37346b8b1a074c62b86 [file] [log] [blame]
#![feature(noop_waker)]
use std::future::Future;
use std::pin::Pin;
use std::task::{Context, Poll, Waker};
pub fn fuzzing_block_on<O, F: Future<Output = O>>(fut: F) -> O {
let mut fut = std::pin::pin!(fut);
let mut context = Context::from_waker(Waker::noop());
loop {
match fut.as_mut().poll(&mut context) {
Poll::Ready(v) => return v,
Poll::Pending => {}
}
}
}
pub struct LastFuture<S> {
last: S,
}
impl<S> Future for LastFuture<S>
where
Self: Unpin,
S: Unpin + Copy,
{
type Output = S;
fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Self::Output> {
return Poll::Ready(self.last);
}
}
fn main() {
fuzzing_block_on(async {
LastFuture { last: &0u32 }.await;
LastFuture { last: Option::<u32>::None }.await;
});
}