mirror of
https://github.com/rust-lang/rust.git
synced 2026-06-01 22:18:23 +03:00
fix async-fn test
This commit is contained in:
+18
-12
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user