Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
Here is the most important subroutine that I separated out when I was doing my experiments. Once I get the basics right, I know the tests could be organized more efficiently in a different structure. I was thinking of a hash of arrays. reduce.pl
#!/usr/bin/env/perl use strict; use warnings; my @answer; #added to suppress warnings, but it still doesn't work. my ($a, $b, $c) = 0; print "0. Value of ARGV is @ARGV; Value of magic array var is @_.\n"; # Take list of arguments from any of the 4 other subroutines # In principle, should accept variable length arguments # and recursively reduce the items in list from right to left. # # Termination: @angle has 1 length. This is pushed onto @answer array +. # Case 1: reduce negative number by adding 60 to it, and # subtracting 1 from number on left. # Case 2: reduce positive number >= 60 by subtracting 60 and # adding 1 to number on left. sub reduce { # print "0. Value of magic array var is @_.\n"; my @angle = @_; # @_ = undef; my ($b, $c) = ($angle[-2], $angle[-1]); # reduce from end. # Warnings when running test script indicate $c in the if statement is + not defined. # But It is defined at the top, and should be defined if the @ARGV var +iable is being passed correctly. if ($c < 0 && scalar(@angle) > 1) { until ($c >= 0 && $c < 60) { $c += 60; $b -= 1; } unshift(@answer, $c); pop(@angle); @angle[-1] = $b; # Debug print statements print "2. b = $b, c = $c\n"; print "2. Angle array is @angle.\n "; print "2. Value of magic array var is @_.\n"; print "2. Values in answer array: @answer.\n"; #### &reduce(@angle); } elsif ($c >= 60 && scalar(@angle) > 1 ) { until ($c < 60 && $c >= 0) { $c -= 60; $b += 1; } unshift(@answer, $c); pop(@angle); @angle[-1] = $b; # Debug print statements print "3. b = $b, c = $c\n"; print "3. Angle array is @angle.\n "; print "3. Value of magic array var is @_.\n"; print "3. Values in answer array: @answer.\n"; #### &reduce(@angle); } elsif ( ($c >= 0 && $c < 60 ) && scalar(@angle) > 1) { unshift(@answer, $c); pop(@angle); &reduce(@angle); } else { unshift(@answer, @angle); print "Reduced answer: @answer \n"; } return $answer; } main( @ARGV ) unless caller(); sub main { &reduce( @ARGV ); }
Test code:
#!/usr/bin/env/perl use strict; use warnings; use Test::More 'no_plan'; my $test_path = "C:/Users/Greyhat/PDL_Old/trig/src"; ok( require( "$test_path/reduce.pl" ), 'Load file correctly.' ) or ex +it; my @test_2 = undef; my $answer_2 = 1; my $note_2 = "undef | $answer_2 | 2. Call with no value."; my @test_3 = (180, 59, 58); my @answer_3 = (180, 59, 58); my $note_3 = "@test_3 | @answer_3 | 3. already reduced"; my @test_4 = (179, 0, 60); my @answer_4 = (179, 1, 0); my $note_4 = "@test_4 | @answer_4 | 4. test if single carry works +correctly"; my @test_5 = (179, 59, 60) ; my @answer_5 = (180, 0, 0) ; my $note_5 = "@test_5 | @answer_5 | 5. tests if multiple carry wor +ks correctly"; my @test_6 = (-179, 60, 0); my @answer_6 = (-178, 0, 0); my $note_6 = "@test_6 | @answer_6 | 6. test addition with negative +s"; my @test_7 = (0, 0, -60); my @answer_7 = (-1, 59, 2); my $note_7 = "@test_7 | @answer_7 | 7. test negative borrow works +correctly"; my @test_8 = (90, 360, 360); my @answer_8 = (96, 6, 0); my $note_8 = "@test_8 | @answer_8 | 8. tests if multiple reduce ca +lls work correct"; # Degree Reduction Tests # Similar problems regardless of how I call the function. Neither tes +ting via main() or directly calling reduce() # are effective. ok( reduce() == $answer_2, $note_2 ); ok( reduce( @test_3 ) == @answer_3, $note_3 ); + ok( reduce( @test_4 ) == @answer_4, $note_4 ); + ok( reduce( @test_5 ) == @answer_5, $note_5 ); + ok( reduce( @test_6 ) == @answer_6, $note_6 ); + ok( reduce( @test_7 ) == @answer_7, $note_7 ); ok( reduce( @test_8 ) == @answer_8, $note_8 ); # Degree Subtraction Tests # Degree Multiplication Tests # Degree Division Tests # More Complicated expressions with

In reply to Re^2: How to write testable command line script? by thechartist
in thread How to write testable command line script? by thechartist

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 admiring the Monastery: (6)
As of 2024-03-28 16:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found