| LL| |#![feature(coverage_attribute)] | |
| LL| |// Enables `coverage(off)` on the entire crate | |
| LL| |//@ reference: attributes.coverage.intro | |
| LL| |//@ reference: attributes.coverage.nesting | |
| LL| | | |
| LL| |#[coverage(off)] | |
| LL| |fn do_not_add_coverage_1() { | |
| LL| | println!("called but not covered"); | |
| LL| |} | |
| LL| | | |
| LL| |fn do_not_add_coverage_2() { | |
| LL| | #![coverage(off)] | |
| LL| | println!("called but not covered"); | |
| LL| |} | |
| LL| | | |
| LL| |#[coverage(off)] | |
| LL| |#[allow(dead_code)] | |
| LL| |fn do_not_add_coverage_not_called() { | |
| LL| | println!("not called and not covered"); | |
| LL| |} | |
| LL| | | |
| LL| 1|fn add_coverage_1() { | |
| LL| 1| println!("called and covered"); | |
| LL| 1|} | |
| LL| | | |
| LL| 1|fn add_coverage_2() { | |
| LL| 1| println!("called and covered"); | |
| LL| 1|} | |
| LL| | | |
| LL| |#[allow(dead_code)] | |
| LL| 0|fn add_coverage_not_called() { | |
| LL| 0| println!("not called but covered"); | |
| LL| 0|} | |
| LL| | | |
| LL| |// FIXME: These test-cases illustrate confusing results of nested functions. | |
| LL| |// See https://github.com/rust-lang/rust/issues/93319 | |
| LL| |mod nested_fns { | |
| LL| | #[coverage(off)] | |
| LL| | pub fn outer_not_covered(is_true: bool) { | |
| LL| | fn inner(is_true: bool) { | |
| LL| | if is_true { | |
| LL| | println!("called and covered"); | |
| LL| | } else { | |
| LL| | println!("absolutely not covered"); | |
| LL| | } | |
| LL| | } | |
| LL| | println!("called but not covered"); | |
| LL| | inner(is_true); | |
| LL| | } | |
| LL| | | |
| LL| 1| pub fn outer(is_true: bool) { | |
| LL| 1| println!("called and covered"); | |
| LL| 1| inner_not_covered(is_true); | |
| LL| | | |
| LL| | #[coverage(off)] | |
| LL| | fn inner_not_covered(is_true: bool) { | |
| LL| | if is_true { | |
| LL| | println!("called but not covered"); | |
| LL| | } else { | |
| LL| | println!("absolutely not covered"); | |
| LL| | } | |
| LL| | } | |
| LL| 1| } | |
| LL| | | |
| LL| 1| pub fn outer_both_covered(is_true: bool) { | |
| LL| 1| println!("called and covered"); | |
| LL| 1| inner(is_true); | |
| LL| | | |
| LL| 1| fn inner(is_true: bool) { | |
| LL| 1| if is_true { | |
| LL| 1| println!("called and covered"); | |
| LL| 1| } else { | |
| LL| 0| println!("absolutely not covered"); | |
| LL| 0| } | |
| LL| 1| } | |
| LL| 1| } | |
| LL| |} | |
| LL| | | |
| LL| 1|fn main() { | |
| LL| 1| let is_true = std::env::args().len() == 1; | |
| LL| | | |
| LL| 1| do_not_add_coverage_1(); | |
| LL| 1| do_not_add_coverage_2(); | |
| LL| 1| add_coverage_1(); | |
| LL| 1| add_coverage_2(); | |
| LL| | | |
| LL| 1| nested_fns::outer_not_covered(is_true); | |
| LL| 1| nested_fns::outer(is_true); | |
| LL| 1| nested_fns::outer_both_covered(is_true); | |
| LL| 1|} | |