On 10/21/2017 6:14 AM, Martin Nowak wrote:
On Friday, 20 October 2017 at 21:26:35 UTC, qznc wrote:
* coverage is not sufficiently solved. The author suggests to reformat code so short-circuit evaluations become multiple lines?


If you can use gdc or ldc, branch coverage should be supported out of the box.
Other tools support regions to be marked as unreachable, e.g GCOVR_EXCL_START/GCOVR_EXCL_STOP. I'd also err on the side that unittests themselves should not be part of coverage, but an option in druntime and more metadata from dmd might solve this.

Filed under https://issues.dlang.org/show_bug.cgi?id=17923.

Not sure what is meant by branch coverage.

Consider:

     x = 2;
     if (x == 1 || x == 2)

Coverage would give:

1|    x = 2;
2|    if (x == 1 || x == 2)

I.e. the second line gets an execution count of 2. By contrast,

1|    x = 1;
1|    if (x == 1 || x == 2)

What's happening here is each of the operands of || are considered to be separate statements as far as coverage analysis goes. It becomes clearer if it is reformatted as:

1|    x = 2;
1|    if (x == 1 ||
1|        x == 2)

or:

3|    x = 2; if (x == 1 || x == 2)

It's usually possible to trivially suss out the coverage of the clauses by looking at the preceding and succeeding line counts. Putting the clauses on separate lines also works. If there's a better way to display the various counts, please add it to the bugzilla report.

Reply via email to