On Thu, May 20, 2004 at 04:34:39PM -0400, Geoffrey Young wrote:

> hi paul.
> 
> I've found that in a statement like
> 
>     $x{foo} ||= 1;
> 
> I can't ever satisfy the first condition in the "condition coverage" matrix
> (0,0) since 1 is always true.  is it desirable to remove fixed truth values
> like this from the truth table?

Well, not to completely remove them, but certainly to downgrade then.
There is already code in place to do that for cases such as
C<my $r = $_ || "qqq";> but the different op tree in this case fooled
me.

This is unlikely to be the only case in which I have not fully
understood the subtleties of the op tree, and so I am grateful for
reports such as this.

The following patch should fix it, and will be in the next release,
hopefully coming next week:

--- lib/Devel/Cover.pm.org      2004-05-18 01:31:08.000000000 +0200
+++ lib/Devel/Cover.pm  2004-05-21 00:55:13.000000000 +0200
@@ -638,7 +638,9 @@ sub add_condition_cover
 
     if ($type eq "or")
     {
-        my $name = $op->first->sibling->name;
+        my $r = $op->first->sibling;
+        my $name = $r->name;
+        $name = $r->first->name if $name eq "sassign";
         if ($name eq "const" || $name eq "srefgen")
         {
             $c = [ $c->[3], $c->[1] + $c->[2] ];

> I tried taking a look at adding the condition to tests/cond_or but I really
> couldn't grok the test suite at first glance :)

It's not one of the more simple test suites out there, that's true.  In
part this is because testing requires running the test program in a new
process under Devel::Cover, then running F<cover> to generate the
results, then checking the results are correct.  To do this, I use
golden results.

So the process is something like:

  - Add the code to the test program in tests/cond_or
  - Run make text TEST=cond_or and check the results are correct
  - Run make gold TEST=cond_or
  - Do this for perl5.6.1, 562, 580, 581, 582, 583, 594 and 592,
    threaded and unthreaded
  - Take appropriate shortcuts by examining the golden results in
    test_output/cover/cond_or.* and using all_versions
  - Try very hard not to mess up

I've not really expected anyone else to do this up to now.  Medium term,
I'd like to improve this process, and I really want to find a way to run
Devel::Cover on itself.

Thanks again for the report.

-- 
Paul Johnson - [EMAIL PROTECTED]
http://www.pjcj.net

Reply via email to