commit 95da9b2e4b43d1f67ab2fde98a228770279ad3d5 Author: Reini Urban Date: Fri Feb 10 17:04:26 2012 -0600 JDs #61515 plus new gold for 5.16 diff --git a/MANIFEST b/MANIFEST index 35e87dc..ab7497b 100644 --- a/MANIFEST +++ b/MANIFEST @@ -138,6 +138,7 @@ test_output/cover/cond_branch.5.013001 test_output/cover/cond_branch.5.013005 test_output/cover/cond_branch.5.013008 test_output/cover/cond_branch.5.015001 +test_output/cover/cond_branch.5.016 test_output/cover/cond_or.5.006001 test_output/cover/cond_or.5.006002 test_output/cover/cond_or.5.008 diff --git a/lib/Devel/Cover.pm b/lib/Devel/Cover.pm index 9107ac0..ab56f18 100755 --- a/lib/Devel/Cover.pm +++ b/lib/Devel/Cover.pm @@ -656,12 +656,14 @@ sub _report "did you require instead of use Devel::Cover?\n" unless defined $Dir; - chdir $Dir or die __PACKAGE__ . ": Can't chdir $Dir: $!\n"; my @collected = get_coverage(); return unless @collected; set_coverage("none") unless $Self_cover; + my $starting_dir = $1 if Cwd::getcwd() =~ /(.*)/; + chdir $Dir or die __PACKAGE__ . ": Can't chdir $Dir: $!\n"; + $Run{collected} = \@collected; $Structure = Devel::Cover::DB::Structure->new(base => $DB); $Structure->read_all; @@ -738,10 +740,12 @@ sub _report $Digests->write; $cover->print_summary if $Summary && !$Silent; - return if !$Self_cover || $Self_cover_run; + if ( $Self_cover && !$Self_cover_run) { - $cover->delete; - delete $Run{vec}; + $cover->delete; + delete $Run{vec}; + } + chdir $starting_dir; } sub add_subroutine_cover diff --git a/test_output/cover/cond_branch.5.016 b/test_output/cover/cond_branch.5.016 new file mode 100644 index 0000000..1b4872d --- /dev/null +++ b/test_output/cover/cond_branch.5.016 @@ -0,0 +1,564 @@ +Reading database from ... + + +------------------------------------------ ------ ------ ------ ------ ------ +File stmt bran cond sub total +------------------------------------------ ------ ------ ------ ------ ------ +tests/cond_branch 90.3 77.2 32.9 100.0 75.7 +Total 90.3 77.2 32.9 100.0 75.7 +------------------------------------------ ------ ------ ------ ------ ------ + + +Run: ... +Perl version: ... +OS: ... +Start: ... +Finish: ... + +tests/cond_branch + +line err stmt bran cond sub code +1 #!/usr/bin/perl +2 +3 # Copyright 2002-2011, Paul Johnson (pjcj@cpan.org) +4 +5 # This software is free. It is licensed under the same terms as Perl itself. +6 +7 # The latest version of this software should be available from my homepage: +8 # http://www.pjcj.net +9 +10 1 1 use strict; + 1 + 1 +11 1 1 use warnings; + 1 + 1 +12 +13 1 my @x; +14 +15 1 for my $y (0, 0) +16 { +17 2 for my $z (1, 0) +18 { +19 *** 4 50 33 if ($y && $z) +20 { +21 *** 0 $x[1]++; +22 } +23 else +24 { +25 4 $x[2]++; +26 } +27 *** 4 100 66 if ($y || $z) +28 { +29 2 $x[3]++; +30 } +31 else +32 { +33 2 $x[4]++; +34 } +35 +36 *** 4 50 $y && $x[5]++; +37 *** 4 50 $x[5]++ if $y; +38 +39 4 100 $z && $x[6]++; +40 4 100 $x[6]++ if $z; +41 +42 *** 4 50 $y || $x[7]++; +43 *** 4 50 $x[7]++ unless $y; +44 +45 4 100 $z || $x[8]++; +46 4 100 $x[8]++ unless $z; +47 +48 *** 4 50 $y ? $x[9]++ : $x[10]++; +49 4 100 $z ? $x[11]++ : $x[12]++; +50 +51 *** 4 50 33 if ($y) + *** 50 66 + 100 +52 { +53 *** 0 $x[13]++; +54 } +55 elsif ($y && $z) +56 { +57 *** 0 $x[14]++; +58 } +59 elsif ($y || $z) +60 { +61 2 $x[15]++; +62 } +63 else +64 { +65 2 $x[16]++; +66 } +67 +68 *** 4 0 33 $y && $z && $x[17]++; $y && $z && $x[18]++; + *** 4 0 33 +69 } +70 } +71 +72 +73 1 for my $y (0, 1) +74 { +75 2 100 $y || next; +76 1 $x[18]++; +77 } +78 +79 1 for my $y (1, 0) +80 { +81 2 100 $y || next; +82 1 $x[19]++; +83 } +84 +85 1 for my $y (0, 1) +86 { +87 2 100 $y && next; +88 1 $x[20]++; +89 } +90 +91 1 for my $y (1, 0) +92 { +93 2 100 $y && next; +94 1 $x[21]++; +95 } +96 +97 1 for my $y (0, 1) +98 { +99 1 1 no warnings "void"; + 1 + 1 +100 *** 2 0 my $w = $y xor next; +101 *** 0 $x[22]++; +102 } +103 +104 1 for my $y (1, 0) +105 { +106 1 1 no warnings "void"; + 1 + 1 +107 *** 2 0 my $w = $y xor next; +108 *** 0 $x[23]++; +109 } +110 +111 +112 1 for my $y (0, 1) +113 { +114 *** 1 50 $y || last; +115 *** 0 $x[24]++; +116 } +117 +118 1 for my $y (1, 0) +119 { +120 2 100 $y || last; +121 1 $x[25]++; +122 } +123 +124 1 for my $y (0, 1) +125 { +126 2 100 $y && last; +127 1 $x[26]++; +128 } +129 +130 1 for my $y (1, 0) +131 { +132 *** 1 50 $y && last; +133 *** 0 $x[27]++; +134 } +135 +136 1 for my $y (0, 1) +137 { +138 1 1 no warnings "void"; + 1 + 1 +139 *** 1 0 my $w = $y xor last; +140 *** 0 $x[28]++; +141 } +142 +143 1 for my $y (1, 0) +144 { +145 1 1 no warnings "void"; + 1 + 1 +146 *** 1 0 my $w = $y xor last; +147 *** 0 $x[29]++; +148 } +149 +150 +151 1 for my $y (0, 1) +152 { +153 *** 1 50 $y || goto G1; +154 *** 0 $x[30]++; +155 } +156 G1: +157 +158 1 for my $y (1, 0) +159 { +160 2 100 $y || goto G2; +161 1 $x[31]++; +162 } +163 G2: +164 +165 1 for my $y (0, 1) +166 { +167 2 100 $y && goto G3; +168 1 $x[32]++; +169 } +170 G3: +171 +172 1 for my $y (1, 0) +173 { +174 *** 1 50 $y && goto G4; +175 *** 0 $x[33]++; +176 } +177 G4: +178 +179 1 for my $y (0, 1) +180 { +181 1 1 no warnings "void"; + 1 + 1 +182 *** 1 0 my $w = $y xor goto G5; +183 *** 0 $x[34]++; +184 } +185 G5: +186 +187 1 for my $y (1, 0) +188 { +189 1 1 no warnings "void"; + 1 + 1 +190 *** 1 0 my $w = $y xor goto G6; +191 *** 0 $x[35]++; +192 } +193 G6: +194 +195 +196 1 my $z; +197 +198 1 $z = -1; +199 1 for my $y (0, 1) +200 { +201 3 $z++; +202 3 100 last if $z > 1; +203 2 100 $z || redo; +204 1 $x[36]++; +205 } +206 +207 1 $z = -1; +208 1 for my $y (1, 0) +209 { +210 3 $z++; +211 3 100 last if $z > 1; +212 2 100 !$z || redo; +213 1 $x[37]++; +214 } +215 +216 1 $z = -1; +217 1 for my $y (0, 1) +218 { +219 3 $z++; +220 3 100 last if $z > 1; +221 2 100 $z && redo; +222 1 $x[38]++; +223 } +224 +225 1 $z = -1; +226 1 for my $y (1, 0) +227 { +228 3 $z++; +229 3 100 last if $z > 1; +230 2 100 !$z && redo; +231 1 $x[39]++; +232 } +233 +234 +235 1 $z = -1; +236 1 for my $y (0, 1) +237 { +238 3 $z++; +239 3 100 last if $z > 1; +240 1 1 no warnings "void"; + 1 + 1 +241 *** 2 0 my $w = $z xor redo; +242 *** 0 $x[40]++; +243 } +244 +245 1 $z = -1; +246 1 for my $y (1, 0) +247 { +248 3 $z++; +249 3 100 last if $z > 1; +250 1 1 no warnings "void"; + 1 + 1 +251 *** 2 0 my $w = !$z xor redo; +252 *** 0 $x[41]++; +253 } +254 +255 +256 my @s = +257 ( +258 sub +259 { +260 4 100 4 shift || return; +261 2 $x[42]++; +262 }, +263 +264 sub +265 { +266 4 100 4 shift && return; +267 2 $x[43]++; +268 }, +269 +270 sub +271 { +272 1 1 no warnings "void"; + 1 + 1 +273 *** 4 0 4 shift xor return; +274 *** 0 $x[44]++; +275 }, +276 +277 sub +278 { +279 4 100 4 my $x = shift || return; +280 2 $x[45]++; +281 }, +282 +283 sub +284 { +285 4 100 4 my $x = shift && return; +286 2 $x[46]++; +287 }, +288 +289 sub +290 { +291 4 4 my $x = shift; +292 4 for my $y (1 .. 2) +293 { +294 6 100 my $z = $x || last; +295 4 $x[47]++; +296 } +297 }, +298 +299 sub +300 { +301 4 4 my $x = shift; +302 4 for my $y (1 .. 2) +303 { +304 8 100 my $z = $x || next; +305 4 $x[48]++; +306 } +307 }, +308 +309 sub +310 { +311 4 4 my $x = shift; +312 4 for my $y (1 .. 2) +313 { +314 10 100 my $z = $x++ || redo; +315 8 $x[49]++; +316 } +317 }, +318 +319 sub +320 { +321 4 4 my $x = shift; +322 4 for my $y (1 .. 2) +323 { +324 6 100 my $z = $x || goto GR; +325 4 $x[50]++; +326 } +327 GR: +328 4 }, +329 +330 sub +331 { +332 4 4 my $x = shift; +333 4 for my $y (1 .. 2) +334 { +335 8 100 eval { my $z = $x || die }; + 8 +336 8 $x[51]++; +337 } +338 }, +339 1 ); +340 +341 1 for my $s (@s) +342 { +343 10 for my $y (0, 1) +344 { +345 20 $s->($y) +346 } +347 +348 10 for my $y (1, 0) +349 { +350 20 $s->($y) +351 } +352 } +353 +354 +355 1 my ($a, $b) = (0, 1); +356 +357 *** 1 50 33 if ($a && $b) + *** 50 33 + *** 50 50 +358 { +359 *** 0 print "path 1\n"; +360 } +361 elsif (!$a && !$b) +362 { +363 *** 0 print "path 2\n"; +364 } +365 elsif ($b || 0) +366 { +367 1 print "path 3\n"; +368 *** 1 50 33 if (!$b || $a) + *** 50 33 +369 { +370 *** 0 print "path 4\n"; +371 } +372 elsif (!$a && $b) +373 { +374 1 print "path 5\n"; +375 } +376 } + + +Branches +-------- + +line err % true false branch +----- --- ------ ------ ------ ------ +19 *** 50 0 4 if ($y and $z) { } +27 100 2 2 if ($y or $z) { } +36 *** 50 0 4 if $y +37 *** 50 0 4 if $y +39 100 2 2 if $z +40 100 2 2 if $z +42 *** 50 4 0 unless $y +43 *** 50 4 0 unless $y +45 100 2 2 unless $z +46 100 2 2 unless $z +48 *** 50 0 4 $y ? : +49 100 2 2 $z ? : +51 *** 50 0 4 if ($y) { } + *** 50 0 4 elsif ($y and $z) { } + 100 2 2 elsif ($y or $z) { } +68 *** 0 0 0 if $y and $z + *** 0 0 0 if $y and $z +75 100 1 1 unless $y +81 100 1 1 unless $y +87 100 1 1 if $y +93 100 1 1 if $y +114 *** 50 1 0 unless $y +120 100 1 1 unless $y +126 100 1 1 if $y +132 *** 50 1 0 if $y +153 *** 50 1 0 unless $y +160 100 1 1 unless $y +167 100 1 1 if $y +174 *** 50 1 0 if $y +202 100 1 2 if $z > 1 +203 100 1 1 unless $z +211 100 1 2 if $z > 1 +212 100 1 1 if $z +220 100 1 2 if $z > 1 +221 100 1 1 if $z +229 100 1 2 if $z > 1 +230 100 1 1 unless $z +239 100 1 2 if $z > 1 +249 100 1 2 if $z > 1 +260 100 2 2 unless shift() +266 100 2 2 if shift() +357 *** 50 0 1 if ($a and $b) { } + *** 50 0 1 elsif (not $a || $b) { } + *** 50 1 0 elsif ($b or 0) { } +368 *** 50 0 1 if (not $b or $a) { } + *** 50 1 0 elsif (not $a and $b) { } + + +Conditions +---------- + +and 2 conditions + +line err % l !l expr +----- --- ------ ------ ------ ---- +285 100 2 2 shift() && (return) + +and 3 conditions + +line err % !l l&&!r l&&r expr +----- --- ------ ------ ------ ------ ---- +19 *** 33 4 0 0 $y and $z +51 *** 33 4 0 0 $y and $z +68 *** 33 4 0 0 $y and $z + *** 33 4 0 0 $y and $z +357 *** 33 1 0 0 $a and $b +368 *** 33 0 0 1 not $a and $b + +or 2 conditions + +line err % l !l expr +----- --- ------ ------ ------ ---- +279 100 2 2 shift() || (return) +294 100 4 2 $x || last +304 100 4 4 $x || next +314 100 8 2 $x++ || redo +324 100 4 2 $x || goto GR +335 100 4 4 $x || die() +357 *** 50 1 0 $b or 0 + +or 3 conditions + +line err % l !l&&r !l&&!r expr +----- --- ------ ------ ------ ------ ---- +27 *** 66 0 2 2 $y or $z +51 *** 66 0 2 2 $y or $z +357 *** 33 0 1 0 $a || $b +368 *** 33 0 0 1 not $b or $a + +xor 4 conditions + +line err % l&&r l&&!r !l&&r !l&&!r expr +----- --- ------ ------ ------ ------ ------ ---- +100 *** 0 0 0 0 0 my $w = $y xor next +107 *** 0 0 0 0 0 my $w = $y xor next +139 *** 0 0 0 0 0 my $w = $y xor last +146 *** 0 0 0 0 0 my $w = $y xor last +182 *** 0 0 0 0 0 my $w = $y xor goto G5 +190 *** 0 0 0 0 0 my $w = $y xor goto G6 +241 *** 0 0 0 0 0 my $w = $z xor redo +251 *** 0 0 0 0 0 my $w = !$z xor redo +273 *** 0 0 0 0 0 shift() xor return + + +Covered Subroutines +------------------- + +Subroutine Count Location +---------- ----- --------------------- +BEGIN 1 tests/cond_branch:10 +BEGIN 1 tests/cond_branch:106 +BEGIN 1 tests/cond_branch:11 +BEGIN 1 tests/cond_branch:138 +BEGIN 1 tests/cond_branch:145 +BEGIN 1 tests/cond_branch:181 +BEGIN 1 tests/cond_branch:189 +BEGIN 1 tests/cond_branch:240 +BEGIN 1 tests/cond_branch:250 +BEGIN 1 tests/cond_branch:272 +BEGIN 1 tests/cond_branch:99 +__ANON__ 4 tests/cond_branch:260 +__ANON__ 4 tests/cond_branch:266 +__ANON__ 4 tests/cond_branch:273 +__ANON__ 4 tests/cond_branch:279 +__ANON__ 4 tests/cond_branch:285 +__ANON__ 4 tests/cond_branch:291 +__ANON__ 4 tests/cond_branch:301 +__ANON__ 4 tests/cond_branch:311 +__ANON__ 4 tests/cond_branch:321 +__ANON__ 4 tests/cond_branch:332 + +