diff options
| author | bors <bors@rust-lang.org> | 2023-11-08 03:00:14 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-11-08 03:00:14 +0000 |
| commit | 91cfcb021935853caa06698b759c293c09d1e96a (patch) | |
| tree | d5dd983288727ef2905faaea5636e416ac86766e /tests/coverage/loops_branches.rs | |
| parent | 0d5ec963bb9f3e481bca1d0149d26f1688784341 (diff) | |
| parent | 4e6f438d2ace2f5297cea2d3e331c6dccd4e18c2 (diff) | |
| download | rust-91cfcb021935853caa06698b759c293c09d1e96a.tar.gz rust-91cfcb021935853caa06698b759c293c09d1e96a.zip | |
Auto merge of #117484 - Zalathar:tests, r=cjgillot
coverage: Unify `tests/coverage-map` and `tests/run-coverage` into `tests/coverage` Ever since the introduction of the `coverage-map` suite, it's been awkward to have to manage two separate coverage test directories containing dozens of mostly-identical files. However, those two suites were separate for good reasons. They have very different requirements (since only one of them requires actually running the test program), running only one suite is noticeably faster than running both, and having separate suites allows them to be blessed separately if desired. So while unifying them was an obvious idea, actually doing so was non-trivial. --- Nevertheless, this PR finds a way to merge the two suites into one directory while retaining almost all of the developer-experience benefits of having two suites. This required non-trivial implementations of `Step`, but the end result works very smoothly. --- The first 5 commits are a copy of #117340, which has been closed in favour of this PR.
Diffstat (limited to 'tests/coverage/loops_branches.rs')
| -rw-r--r-- | tests/coverage/loops_branches.rs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/coverage/loops_branches.rs b/tests/coverage/loops_branches.rs new file mode 100644 index 00000000000..f3a343bcc1f --- /dev/null +++ b/tests/coverage/loops_branches.rs @@ -0,0 +1,60 @@ +#![allow(unused_assignments, unused_variables, while_true)] + +// This test confirms that (1) unexecuted infinite loops are handled correctly by the +// InstrumentCoverage MIR pass; and (2) Counter Expressions that subtract from zero can be dropped. + +struct DebugTest; + +impl std::fmt::Debug for DebugTest { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + if true { + if false { + while true {} + } + write!(f, "cool")?; + } else { + } + + for i in 0..10 { + if true { + if false { + while true {} + } + write!(f, "cool")?; + } else { + } + } + Ok(()) + } +} + +struct DisplayTest; + +impl std::fmt::Display for DisplayTest { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + if false { + } else { + if false { + while true {} + } + write!(f, "cool")?; + } + for i in 0..10 { + if false { + } else { + if false { + while true {} + } + write!(f, "cool")?; + } + } + Ok(()) + } +} + +fn main() { + let debug_test = DebugTest; + println!("{:?}", debug_test); + let display_test = DisplayTest; + println!("{}", display_test); +} |
