LL| |// compile-flags: --edition=2018 LL| | LL| |use core::{ LL| | future::Future, LL| | marker::Send, LL| | pin::Pin, LL| |}; LL| | LL| 1|fn non_async_func() { LL| 1| println!("non_async_func was covered"); LL| 1| let b = true; LL| 1| if b { LL| 1| println!("non_async_func println in block"); LL| 1| } ^0 LL| 1|} LL| | LL| | LL| | LL| | LL| 1|async fn async_func() { LL| 1| println!("async_func was covered"); LL| 1| let b = true; LL| 1| if b { LL| 1| println!("async_func println in block"); LL| 1| } ^0 LL| 1|} LL| | LL| | LL| | LL| | LL| 1|async fn async_func_just_println() { LL| 1| println!("async_func_just_println was covered"); LL| 1|} LL| | LL| 1|fn main() { LL| 1| println!("codecovsample::main"); LL| 1| LL| 1| non_async_func(); LL| 1| LL| 1| executor::block_on(async_func()); LL| 1| executor::block_on(async_func_just_println()); LL| 1|} LL| | LL| |mod executor { LL| | use core::{ LL| | future::Future, LL| | pin::Pin, LL| | task::{Context, Poll, RawWaker, RawWakerVTable, Waker}, LL| | }; LL| | LL| 2| pub fn block_on(mut future: F) -> F::Output { LL| 2| let mut future = unsafe { Pin::new_unchecked(&mut future) }; LL| 2| use std::hint::unreachable_unchecked; LL| 2| static VTABLE: RawWakerVTable = RawWakerVTable::new( LL| 2| |_| unsafe { unreachable_unchecked() }, // clone ^0 LL| 2| |_| unsafe { unreachable_unchecked() }, // wake ^0 LL| 2| |_| unsafe { unreachable_unchecked() }, // wake_by_ref ^0 LL| 2| |_| (), LL| 2| ); LL| 2| let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; LL| 2| let mut context = Context::from_waker(&waker); LL| | LL| | loop { LL| 2| if let Poll::Ready(val) = future.as_mut().poll(&mut context) { LL| 2| break val; LL| 0| } LL| | } LL| 2| } ------------------ | async2::executor::block_on::: | LL| 1| pub fn block_on(mut future: F) -> F::Output { | LL| 1| let mut future = unsafe { Pin::new_unchecked(&mut future) }; | LL| 1| use std::hint::unreachable_unchecked; | LL| 1| static VTABLE: RawWakerVTable = RawWakerVTable::new( | LL| 1| |_| unsafe { unreachable_unchecked() }, // clone | LL| 1| |_| unsafe { unreachable_unchecked() }, // wake | LL| 1| |_| unsafe { unreachable_unchecked() }, // wake_by_ref | LL| 1| |_| (), | LL| 1| ); | LL| 1| let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; | LL| 1| let mut context = Context::from_waker(&waker); | LL| | | LL| | loop { | LL| 1| if let Poll::Ready(val) = future.as_mut().poll(&mut context) { | LL| 1| break val; | LL| 0| } | LL| | } | LL| 1| } ------------------ | async2::executor::block_on::: | LL| 1| pub fn block_on(mut future: F) -> F::Output { | LL| 1| let mut future = unsafe { Pin::new_unchecked(&mut future) }; | LL| 1| use std::hint::unreachable_unchecked; | LL| 1| static VTABLE: RawWakerVTable = RawWakerVTable::new( | LL| 1| |_| unsafe { unreachable_unchecked() }, // clone | LL| 1| |_| unsafe { unreachable_unchecked() }, // wake | LL| 1| |_| unsafe { unreachable_unchecked() }, // wake_by_ref | LL| 1| |_| (), | LL| 1| ); | LL| 1| let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }; | LL| 1| let mut context = Context::from_waker(&waker); | LL| | | LL| | loop { | LL| 1| if let Poll::Ready(val) = future.as_mut().poll(&mut context) { | LL| 1| break val; | LL| 0| } | LL| | } | LL| 1| } ------------------ LL| |}