fix async-fn test
This commit is contained in:
parent
15722fab51
commit
e630175867
1 changed files with 18 additions and 12 deletions
|
|
@ -4,7 +4,8 @@
|
|||
futures_api,
|
||||
)]
|
||||
|
||||
use std::{future::Future, pin::Pin, task::Poll};
|
||||
use std::{future::Future, pin::Pin, task::Poll, ptr};
|
||||
use std::task::{Waker, RawWaker, RawWakerVTable};
|
||||
|
||||
// See if we can run a basic `async fn`
|
||||
pub async fn foo(x: &u32, y: u32) -> u32 {
|
||||
|
|
@ -17,18 +18,23 @@ pub async fn foo(x: &u32, y: u32) -> u32 {
|
|||
*x + y + *a
|
||||
}
|
||||
|
||||
fn raw_waker_clone(_this: *const ()) -> RawWaker {
|
||||
panic!("unimplemented");
|
||||
}
|
||||
fn raw_waker_wake(_this: *const ()) {
|
||||
panic!("unimplemented");
|
||||
}
|
||||
fn raw_waker_drop(_this: *const ()) {}
|
||||
|
||||
static RAW_WAKER: RawWakerVTable = RawWakerVTable {
|
||||
clone: raw_waker_clone,
|
||||
wake: raw_waker_wake,
|
||||
drop: raw_waker_drop,
|
||||
};
|
||||
|
||||
fn main() {
|
||||
use std::{sync::Arc, task::{Wake, local_waker}};
|
||||
|
||||
struct NoWake;
|
||||
impl Wake for NoWake {
|
||||
fn wake(_arc_self: &Arc<Self>) {
|
||||
panic!();
|
||||
}
|
||||
}
|
||||
|
||||
let lw = unsafe { local_waker(Arc::new(NoWake)) };
|
||||
let x = 5;
|
||||
let mut fut = foo(&x, 7);
|
||||
assert_eq!(unsafe { Pin::new_unchecked(&mut fut) }.poll(&lw), Poll::Ready(31));
|
||||
let waker = unsafe { Waker::new_unchecked(RawWaker::new(ptr::null(), &RAW_WAKER)) };
|
||||
assert_eq!(unsafe { Pin::new_unchecked(&mut fut) }.poll(&waker), Poll::Ready(31));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue