digitalmars.D.bugs - code coverage bug: do-while - cov.d
- Ivan Cibiri (36/36) Dec 28 2005 Hello,
- Don Clugston (10/20) Dec 28 2005 I don't think this is a code-coverage bug. Isn't it a bug to leave out
- Oskar Linde (17/43) Dec 28 2005 No, it is correct. according to the spec, do statements do not end with
Hello,
I thing that there is a small bug in code coverage in dmd v0.141.
If you compile code in attached file cov.d (dmd cov.d -cov) and run the program,
you get this output:
|int main() {
1| int counter = 20;
| do {
20| --counter;
0000000| } while(counter > 0)
| // previous line IS NOT considered by code coverage
| //(because of missing semicolon?)
|
1| counter = 20;
| do {
20| --counter;
1| } while(counter > 0);
| // if you add semicolon,
| // previous line IS considered by code coverage
|
1| return 0;
|}
cov.d is 85% covered
Problem is with do-while statement (while part), as you can see from the listing
file, because it is not corectly considered as executed (zero times or once ?).
Ivan
begin 0644 cov.d
M8V]U;G1E<CL-" E]('=H:6QE*&-O=6YT97( /B`P*0T*"2\O('!R979I;W5S
M(&QI;F4 25, 3D]4(&-O;G-I9&5R960 8GD 8V]D92!C;W9E<F%G92`-" DO
M+RAB96-A=7-E(&]F(&UI<W-I;F< <V5M:6-O;&]N/RD-" D-" EC;W5N=&5R
M(#T
M(#X
`
end
Dec 28 2005
Ivan Cibiri wrote:1| int counter = 20; | do { 20| --counter; 0000000| } while(counter > 0) | // previous line IS NOT considered by code coverage | //(because of missing semicolon?) | 1| counter = 20;Problem is with do-while statement (while part), as you can see from the listing file, because it is not corectly considered as executed (zero times or once ?).I don't think this is a code-coverage bug. Isn't it a bug to leave out the semicolon? I don't think it should compile at all. And it looks to me as though the syntax in statement.html is wrong. DoStatement: do Statement while () Expression Surely this should be: do Statement while ( Expression) and ditto for "for", etc. (Maybe these typos were introduced when changing to Ddoc).
Dec 28 2005
Don Clugston wrote:Ivan Cibiri wrote:No, it is correct. according to the spec, do statements do not end with a semicolon. The semicolon will be considered an empty statement, and therefore counted once. The bug is the condition in the do-while loop that never gets counted, the lines containing while should be counted 20 and 21 times respectively. Consider: |void main() { 1| int n = 20; | do { 20| ; 0000000| } while (--n) |} test.d is 66% covered This is not correct. test.d should be fully covered.1| int counter = 20; | do { 20| --counter; 0000000| } while(counter > 0) | // previous line IS NOT considered by code coverage | //(because of missing semicolon?) | 1| counter = 20;Problem is with do-while statement (while part), as you can see from the listing file, because it is not corectly considered as executed (zero times or once ?).I don't think this is a code-coverage bug. Isn't it a bug to leave out the semicolon? I don't think it should compile at all.And it looks to me as though the syntax in statement.html is wrong. DoStatement: do Statement while () Expression Surely this should be: do Statement while ( Expression)Yes, this seems wrong. Maybe its just a newly invented notation. :) /Oskar
Dec 28 2005








Oskar Linde <oskar.lindeREM OVEgmail.com>