l
и r
относятся к правой и левой части выражения, а число представляет число случаев, когда связанное выражение было истинным.
Например, есть покрытие 0
для l && !r
для следующего выражения:
exists $self->{'true'} and exists $self->{'false'}
Это означает, что 0
тесты охватывают ситуацию, когда верно следующее:
(exists $self->{'true'}) && !(exists $self->{'false'})
Логические и и логические или имеют два входа, которые могут принимать каждое из двух значений.
+-----------------+-----------------+
| Left-hand side | Right-hand side |
+-----------------+-----------------+
| False | False |
| False | True |
| True | False |
| True | True |
+-----------------+-----------------+
Однако из-за короткого замыкания Perl не всегда оценивает правую часть. Случаи действительно следующие:
+-----------------------------------+
| Logical AND |
+-----------------+-----------------+
| Left-hand side | Right-hand side |
+-----------------+-----------------+
| False | - |
| True | False |
| True | True |
+-----------------+-----------------+
+-----------------------------------+
| Logical OR |
+-----------------+-----------------+
| Left-hand side | Right-hand side |
+-----------------+-----------------+
| False | False |
| False | True |
| True | - |
+-----------------+-----------------+
Devel :: Cover сообщает, какие из этих наборов входов были протестированы.
+--------------------------------------------------------+
| Logical AND |
+--------------------+-----------------+-----------------+
| Devel::Cover label | Left-hand side | Right-hand side |
+--------------------+-----------------+-----------------+
| !l | False | - |
| l && !r | True | False |
| l && r | True | True |
+--------------------+-----------------+-----------------+
+--------------------------------------------------------+
| Logical OR |
+--------------------+-----------------+-----------------+
| Devel::Cover label | Left-hand side | Right-hand side |
+--------------------+-----------------+-----------------+
| l | True | - |
| !l && r | False | True |
| !l && !r | False | False |
+--------------------+-----------------+-----------------+
Если мы посмотрим на первую строку связанной страницы, мы увидим
!l 2
l && !r 0
l && r 2
для
exists $self->{'true'} and exists $self->{'false'}
Это значит
!l meaning !(exists $self->{'true'}) was true 2 times.
l && !r meaning (exists $self->{'true'}) && !(exists $self->{'false'}) was true 0 times.
l && r meaning (exists $self->{'true'}) && (exists $self->{'false'}) was true 2 times.
Это означает, что (exists $self->{'true'}) && !(exists $self->{'false'})
истинность никогда не проверялась.