Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
One of the things a like about testing/tests/test suites/coverage stats is that it can sometimes1 (often?) cause re-evaluation of how you wrote some specific piece of code.

I recently wrote a snippet of code of this form:
sub foo { my $s = shift; if( $s =~ /^(AAA|BBB|CCC)$/ ){ my $foo = $HASH{$1}; my $bar = bar($s); ... } }
While there could easily style/preference (or efficiency) arguments made about this form and use of the regex to match for multiple exact matches, it's nice because it's concise and easy to add an extra case or two (i.e. not an extra line, though obviously adding more than just a couple would be messy).

I found myself wanted to rewrite it, however, for a different reason after starting to compose my test suite. A test suite consisting of a call to foo('AAA') and foo('DDD') is sufficient for Devel::Cover to report 100% coverage. But clearly it's not going after the 'BBB' or 'CCC' of the conditional that's embedded in the regex logic.

If, however, it's rewritten as:
if( $s eq 'AAA' || $s eq 'BBB' || $s eq 'CCC' ){ ... }
or (depending on the innards of the block)
if( $s eq 'AAA' ){ ... }elsif( $s eq 'BBB' ){ ... }elsif( $s eq 'CCC' ){ }
then it requires tests of foo('DDD'), foo('AAA'), foo('BBB'), and foo('CCC') for full coverage.


1. Two other examples of coverage issues causing code changes that i've run into:

In reply to coverage influencing form by davidrw

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (6)
As of 2024-04-25 08:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found