For a random array element, the important things to check are:

1) Does the element always fall within accepted bounds?
2) Is the distribution properly random?

Best thing to do is set up a wrapper to run your function some large x number of times, then store counts of each element number and print out the counts sorted by element number. This will show distribution and min / max. You can also calculate the average deviation from what would be the best possible distribution. For instance:

use strict; use warnings; my $min = 10; my $max = 100; my $tests = 10000; my (%c, $n, $average, $deviations); for (1..$tests) { $n = makerandom($min, $max); $c{$n}++; } $average = $tests / ($max - $min + 1); for (sort {$a <=> $b} keys %c) { $n = $c{$_}; $deviations += abs($n - $average); print "$_ => $n\n"; } print "Average deviation +-" . $deviations / ($max - $min + 1) / $aver +age * 100 . " % from $tests tests"; sub makerandom { my ($min, $max) = @_; return int rand ($max - $min + 1) + $min; }
As you can see by increasing the number of tests, deviation drops to very little as the number of tests gets very large, therefore the makerandom function is working just fine.

Average deviation +-6.9454945054945 % from 10000 tests
Average deviation +-2.24830769230769 % from 100000 tests
Average deviation +-0.77529010989011 % from 1000000 tests


In reply to Re: writing tests on modules by TedPride
in thread writing tests on modules by arcnon

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



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.