|  | #![allow(unused_assignments)] | 
|  |  | 
|  | extern "C" fn might_abort(should_abort: bool) { | 
|  | if should_abort { | 
|  | println!("aborting..."); | 
|  | panic!("panics and aborts"); | 
|  | } else { | 
|  | println!("Don't Panic"); | 
|  | } | 
|  | } | 
|  |  | 
|  | #[rustfmt::skip] | 
|  | fn main() -> Result<(), u8> { | 
|  | let mut countdown = 10; | 
|  | while countdown > 0 { | 
|  | if countdown < 5 { | 
|  | might_abort(false); | 
|  | } | 
|  | // See discussion (below the `Notes` section) on coverage results for the closing brace. | 
|  | if countdown < 5 { might_abort(false); } // Counts for different regions on one line. | 
|  | // For the following example, the closing brace is the last character on the line. | 
|  | // This shows the character after the closing brace is highlighted, even if that next | 
|  | // character is a newline. | 
|  | if countdown < 5 { might_abort(false); } | 
|  | countdown -= 1; | 
|  | } | 
|  | Ok(()) | 
|  | } | 
|  |  | 
|  | // Notes: | 
|  | //   1. Compare this program and its coverage results to those of the similar tests | 
|  | //      `panic_unwind.rs` and `try_error_result.rs`. | 
|  | //   2. This test confirms the coverage generated when a program includes `UnwindAction::Terminate`. | 
|  | //   3. The test does not invoke the abort. By executing to a successful completion, the coverage | 
|  | //      results show where the program did and did not execute. | 
|  | //   4. If the program actually aborted, the coverage counters would not be saved (which "works as | 
|  | //      intended"). Coverage results would show no executed coverage regions. | 
|  | //   6. If `should_abort` is `true` and the program aborts, the program exits with a `132` status | 
|  | //      (on Linux at least). | 
|  |  | 
|  | /* | 
|  |  | 
|  | Expect the following coverage results: | 
|  |  | 
|  | ```text | 
|  | 16|     11|    while countdown > 0 { | 
|  | 17|     10|        if countdown < 5 { | 
|  | 18|      4|            might_abort(false); | 
|  | 19|      6|        } | 
|  | ``` | 
|  |  | 
|  | This is actually correct. | 
|  |  | 
|  | The condition `countdown < 5` executed 10 times (10 loop iterations). | 
|  |  | 
|  | It evaluated to `true` 4 times, and executed the `might_abort()` call. | 
|  |  | 
|  | It skipped the body of the `might_abort()` call 6 times. If an `if` does not include an explicit | 
|  | `else`, the coverage implementation injects a counter, at the character immediately after the `if`s | 
|  | closing brace, to count the "implicit" `else`. This is the only way to capture the coverage of the | 
|  | non-true condition. | 
|  |  | 
|  | As another example of why this is important, say the condition was `countdown < 50`, which is always | 
|  | `true`. In that case, we wouldn't have a test for what happens if `might_abort()` is not called. | 
|  | The closing brace would have a count of `0`, highlighting the missed coverage. | 
|  | */ |