coverage: Add a test for async
blocks
We have coverage tests that use async functions, but none that use async blocks.
This commit is contained in:
parent
5810deef69
commit
4ae792036e
3 changed files with 104 additions and 0 deletions
32
tests/coverage/async_block.cov-map
Normal file
32
tests/coverage/async_block.cov-map
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
Function name: async_block::main
|
||||||
|
Raw bytes (38): 0x[01, 01, 02, 01, 05, 03, 05, 06, 01, 05, 01, 00, 0b, 05, 01, 09, 00, 0a, 03, 00, 0e, 00, 13, 05, 00, 14, 01, 16, 05, 07, 0a, 02, 06, 06, 03, 01, 00, 02]
|
||||||
|
Number of files: 1
|
||||||
|
- file 0 => global file 1
|
||||||
|
Number of expressions: 2
|
||||||
|
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||||
|
- expression 1 operands: lhs = Expression(0, Add), rhs = Counter(1)
|
||||||
|
Number of file 0 mappings: 6
|
||||||
|
- Code(Counter(0)) at (prev + 5, 1) to (start + 0, 11)
|
||||||
|
- Code(Counter(1)) at (prev + 1, 9) to (start + 0, 10)
|
||||||
|
- Code(Expression(0, Add)) at (prev + 0, 14) to (start + 0, 19)
|
||||||
|
= (c0 + c1)
|
||||||
|
- Code(Counter(1)) at (prev + 0, 20) to (start + 1, 22)
|
||||||
|
- Code(Counter(1)) at (prev + 7, 10) to (start + 2, 6)
|
||||||
|
- Code(Expression(1, Sub)) at (prev + 3, 1) to (start + 0, 2)
|
||||||
|
= ((c0 + c1) - c1)
|
||||||
|
|
||||||
|
Function name: async_block::main::{closure#0}
|
||||||
|
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 07, 1c, 01, 17, 05, 01, 18, 02, 0e, 02, 02, 14, 02, 0e, 07, 03, 09, 00, 0a]
|
||||||
|
Number of files: 1
|
||||||
|
- file 0 => global file 1
|
||||||
|
Number of expressions: 2
|
||||||
|
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||||
|
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||||
|
Number of file 0 mappings: 4
|
||||||
|
- Code(Counter(0)) at (prev + 7, 28) to (start + 1, 23)
|
||||||
|
- Code(Counter(1)) at (prev + 1, 24) to (start + 2, 14)
|
||||||
|
- Code(Expression(0, Sub)) at (prev + 2, 20) to (start + 2, 14)
|
||||||
|
= (c0 - c1)
|
||||||
|
- Code(Expression(1, Add)) at (prev + 3, 9) to (start + 0, 10)
|
||||||
|
= (c1 + (c0 - c1))
|
||||||
|
|
37
tests/coverage/async_block.coverage
Normal file
37
tests/coverage/async_block.coverage
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
LL| |#![feature(coverage_attribute)]
|
||||||
|
LL| |#![feature(noop_waker)]
|
||||||
|
LL| |// edition: 2021
|
||||||
|
LL| |
|
||||||
|
LL| 1|fn main() {
|
||||||
|
LL| 17| for i in 0..16 {
|
||||||
|
^16
|
||||||
|
LL| 16| let future = async {
|
||||||
|
LL| 16| if i >= 12 {
|
||||||
|
LL| 4| println!("big");
|
||||||
|
LL| 12| } else {
|
||||||
|
LL| 12| println!("small");
|
||||||
|
LL| 12| }
|
||||||
|
LL| 16| };
|
||||||
|
LL| 16| executor::block_on(future);
|
||||||
|
LL| 16| }
|
||||||
|
LL| 1|}
|
||||||
|
LL| |
|
||||||
|
LL| |mod executor {
|
||||||
|
LL| | use core::future::Future;
|
||||||
|
LL| | use core::pin::pin;
|
||||||
|
LL| | use core::task::{Context, Poll, Waker};
|
||||||
|
LL| |
|
||||||
|
LL| | #[coverage(off)]
|
||||||
|
LL| | pub fn block_on<F: Future>(mut future: F) -> F::Output {
|
||||||
|
LL| | let mut future = pin!(future);
|
||||||
|
LL| | let waker = Waker::noop();
|
||||||
|
LL| | let mut context = Context::from_waker(&waker);
|
||||||
|
LL| |
|
||||||
|
LL| | loop {
|
||||||
|
LL| | if let Poll::Ready(val) = future.as_mut().poll(&mut context) {
|
||||||
|
LL| | break val;
|
||||||
|
LL| | }
|
||||||
|
LL| | }
|
||||||
|
LL| | }
|
||||||
|
LL| |}
|
||||||
|
|
35
tests/coverage/async_block.rs
Normal file
35
tests/coverage/async_block.rs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#![feature(coverage_attribute)]
|
||||||
|
#![feature(noop_waker)]
|
||||||
|
// edition: 2021
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
for i in 0..16 {
|
||||||
|
let future = async {
|
||||||
|
if i >= 12 {
|
||||||
|
println!("big");
|
||||||
|
} else {
|
||||||
|
println!("small");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
executor::block_on(future);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mod executor {
|
||||||
|
use core::future::Future;
|
||||||
|
use core::pin::pin;
|
||||||
|
use core::task::{Context, Poll, Waker};
|
||||||
|
|
||||||
|
#[coverage(off)]
|
||||||
|
pub fn block_on<F: Future>(mut future: F) -> F::Output {
|
||||||
|
let mut future = pin!(future);
|
||||||
|
let waker = Waker::noop();
|
||||||
|
let mut context = Context::from_waker(&waker);
|
||||||
|
|
||||||
|
loop {
|
||||||
|
if let Poll::Ready(val) = future.as_mut().poll(&mut context) {
|
||||||
|
break val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue