Reading database from ...


---------------- ------ ------ ------ ------ ------
File               stmt   bran   cond    sub  total
---------------- ------ ------ ------ ------ ------
tests/cond_or      89.4   33.3   63.3   60.0   70.0
tests/cond_or.pl  100.0    n/a   57.5  100.0   75.7
Total              92.8   33.3   61.0   75.0   71.9
---------------- ------ ------ ------ ------ ------


Run: ...
Perl version: ...
OS: ...
Start: ...
Finish: ...

tests/cond_or

line  err   stmt   bran   cond    sub   code
1                                       #!/usr/bin/perl
2                                       
3                                       # Copyright 2002-2026, Paul Johnson (paul@pjcj.net)
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                                       # https://pjcj.net
9                                       
10                                      # __COVER__ skip_test $^O eq "cygwin"
11                                      # __COVER__ skip_reason Busted on cygwin
12                                      
13             1                    1   use strict;
               1                        
               1                        
14             1                    1   use warnings;
               1                        
               1                        
15                                      
16             1                        my @x;
17                                      
18             1                        my $y  = 1;
19             1                        my $z  = 0;
20             1                        $::foo = 17;
21                                      
22             1                        $ENV{PATH} = "/bin";
23             1                        system "pwd";
24             1                    1   use lib "tests";
               1                        
               1                        
25             1                        my $file = "cond_or.pl";
26    ***      1   * 50                 unless (my $return = do $file) {
27    ***     *0   *  0                     die "couldn't parse $file: $@" if $@;
28    ***     *0   *  0                     die "couldn't do $file: $!"    unless defined $return;
29    ***     *0   *  0                     die "couldn't run $file"       unless $return;
30                                      }
31                                      
32             1                        for my $i (0 .. 10) {
33    ***     11   * 50                     $y ||
34                                              $x[1]++;
35                                      
36    ***     11   * 50   * 33              $y ||
37                                              $x[0]++ ||
38                                              $x[1]++;
39                                      
40    ***     11   * 50                     $x[2]++
41                                              unless $z;
42                                      
43            11                            for (0 .. 2) {
44            33                                $x[3]++;
45                                          }
46                                      
47    ***     11   * 50                     if ($z) {
48    ***     *0                                $x[4]++;
49                                          } else {
50            11                                $x[5]++;
51                                          }
52                                      
53    ***     11          * 33              my $p = $y || $z;
54    ***     11          * 33              my $q = $z || $y;
55            11           100              my $r = $i || "qqq";
56            11           100              my $s = $i || [];
57            11                            my $t = $y | $z;
58    ***     11          * 50              my $u = $y || 0;
59    ***     11          * 50              my $v = $y || undef;
60    ***     11          * 50              my $w = $z || 0;
61                                      
62    ***     11          * 33              $p     ||= $y;
63    ***     11          * 33              $p     ||= $z;
64    ***     11          * 66              $x[ 6] ||= $y;
65    ***     11          * 33              $x[ 7] ||= $z;
66            11           100              $x[ 8] ||= 1;
67            11           100              $x[ 9] ||= {};
68            11           100              $x[10] ||= \"foo";
69            11           100              $x[11] ||= \$y;
70            11           100              $x[12] ||= \*STDIO;
71    ***     11          * 66     *0       $x[13] ||= sub { 1 };
      ***     *0                        
72            11           100              $x[14] ||= *::foo{SCALAR};
73    ***     11          * 50              $x[15] ||= *STDIO{IO};
74            11           100              $x[16] ||= bless {}, "XXX";
75            11           100              $x[17] ||= $i == 1;
76    ***     11          * 33              $w     ||= ref($i) eq "SCALAR";
77            11           100              $x[18] ||= <<"EOD";
78                                      blah
79                                      EOD
80    ***     11   * 50                     cond_dor(\@x) if exists &cond_dor;
81    ***     11          *  0     *0       sub { $x[19] ||= 1 };
      ***     *0                        
82                                      }
83                                      
84                                      # print join(", ", @x), "\n";


Branches
--------

line  err      %   true  false   branch
----- --- ------ ------ ------   ------
26    ***     50      0      1   unless (my $return = do $file)
27    ***      0      0      0   if $@
28    ***      0      0      0   unless defined $return
29    ***      0      0      0   unless $return
33    ***     50      0     11   unless $y
36    ***     50      0     11   unless $y or $x[0]++
40    ***     50     11      0   unless $z
47    ***     50      0     11   if ($z) { }
80    ***     50     11      0   if exists &main::cond_dor


Conditions
----------

or 2 conditions

line  err      %      l     !l   expr
----- --- ------ ------ ------   ----
55           100     10      1   $i || 'qqq'
56           100     10      1   $i || []
58    ***     50     11      0   $y || 0
59    ***     50     11      0   $y || undef
60    ***     50      0     11   $z || 0
66           100     10      1   $x[8] ||= 1
67           100     10      1   $x[9] ||= {}
68           100     10      1   $x[10] ||= \"foo"
69           100     10      1   $x[11] ||= \$y
70           100     10      1   $x[12] ||= \*STDIO
72           100     10      1   $x[14] ||= *foo{"SCALAR"}
73    ***     50      0     11   $x[15] ||= *STDIO{"IO"}
74           100     10      1   $x[16] ||= bless({}, "XXX")
77           100     10      1   $x[18] ||= "blah\n"
81    ***      0      0      0   $x[19] ||= 1

or 3 conditions

line  err      %      l  !l&&r !l&&!r   expr
----- --- ------ ------ ------ ------   ----
36    ***     33     11      0      0   $y or $x[0]++
53    ***     33     11      0      0   $y || $z
54    ***     33      0     11      0   $z || $y
62    ***     33     11      0      0   $p ||= $y
63    ***     33     11      0      0   $p ||= $z
64    ***     66     10      1      0   $x[6] ||= $y
65    ***     33      0      0     11   $x[7] ||= $z
71    ***     66     10      1      0   $x[13] ||= sub {
	1;
}

75           100      9      1      1   $x[17] ||= $i == 1
76    ***     33      0      0     11   $w ||= ref $i eq "SCALAR"


Covered Subroutines
-------------------

Subroutine Count Location        
---------- ----- ----------------
BEGIN          1 tests/cond_or:13
BEGIN          1 tests/cond_or:14
BEGIN          1 tests/cond_or:24

Uncovered Subroutines
---------------------

Subroutine Count Location        
---------- ----- ----------------
__ANON__       0 tests/cond_or:71
__ANON__       0 tests/cond_or:81


tests/cond_or.pl

line  err   stmt   bran   cond    sub   code
1                                       #!/usr/bin/perl
2                                       
3                                       # Copyright 2002-2026, Paul Johnson (paul@pjcj.net)
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                                       # https://pjcj.net
9                                       
10             1                    1   use strict;
               1                        
               1                        
11             1                    1   use warnings;
               1                        
               1                        
12                                      
13                                      sub cond_dor {
14            11                   11       my ($x) = @_;
15                                      
16    ***     11          * 50              $x->[18] //= undef;
17    ***     11          * 50              $x->[18] //= 0;
18    ***     11          * 50              $x->[18] //= 0;
19    ***     11          * 50              $x->[18] //= 1;
20    ***     11          * 50              $x->[18] //= 1;
21                                      
22            11           100              $x->[19] //= 1;
23    ***     11          * 50              $x->[19] //= 1;
24    ***     11          * 50              $x->[19] //= 0;
25    ***     11          * 50              $x->[19] //= undef;
26    ***     11          * 50              $x->[19] //= 1;
27                                      
28    ***     11          * 50              $x->[20]   = $x->[21] // undef;
29    ***     11          * 50              $x->[20]   = $x->[21] // 0;
30    ***     11          * 50              $x->[20]   = $x->[21] // 0;
31    ***     11          * 50              $x->[20]   = $x->[21] // 1;
32    ***     11          * 50              $x->[20]   = $x->[21] // 1;
33                                      
34            11           100              $x->[22]   = $x->[22] // undef;
35            11           100              $x->[22]   = $x->[22] // 0;
36    ***     11          * 50              $x->[22]   = $x->[22] // 0;
37    ***     11          * 50              $x->[22]   = $x->[22] // 1;
38    ***     11          * 50              $x->[22]   = $x->[22] // 1;
39                                      }
40                                      
41                                      1;


Conditions
----------

or 2 conditions

line  err      %      l     !l   expr
----- --- ------ ------ ------   ----
16    ***     50     11      0   $x->[18] //= undef
17    ***     50     11      0   $x->[18] //= 0
18    ***     50     11      0   $x->[18] //= 0
19    ***     50     11      0   $x->[18] //= 1
20    ***     50     11      0   $x->[18] //= 1
22           100     10      1   $x->[19] //= 1
23    ***     50     11      0   $x->[19] //= 1
24    ***     50     11      0   $x->[19] //= 0
25    ***     50     11      0   $x->[19] //= undef
26    ***     50     11      0   $x->[19] //= 1
28    ***     50      0     11   $x->[21] // undef
29    ***     50      0     11   $x->[21] // 0
30    ***     50      0     11   $x->[21] // 0
31    ***     50      0     11   $x->[21] // 1
32    ***     50      0     11   $x->[21] // 1
34           100     10      1   $x->[22] // undef
35           100     10      1   $x->[22] // 0
36    ***     50     11      0   $x->[22] // 0
37    ***     50     11      0   $x->[22] // 1
38    ***     50     11      0   $x->[22] // 1


Covered Subroutines
-------------------

Subroutine Count Location           
---------- ----- -------------------
BEGIN          1 tests/cond_or.pl:10
BEGIN          1 tests/cond_or.pl:11
cond_dor      11 tests/cond_or.pl:14