Probability-Distributions-for-PHP icon indicating copy to clipboard operation
Probability-Distributions-for-PHP copied to clipboard

Abstract simulation testing strategy.

Open gburtini opened this issue 9 years ago • 1 comments

When testing if an implementation probabilistically fits the expected distribution, we should be able to abstract simulatory code something like this to test probability cutoff and means. We could also compute expected variances and such within a bound.

$scale = 50000;
$cutoff = 10.0;
$counter = 0;
$draws = new SplFixedArray($scale);
for($i = 0; $i < $scale; $i++) {
   $x = $d->rand();
   $draws[$i] = $x;
   if ($x > $cutoff) $counter = $counter + 1;
}
$number = array_sum((array) $draws) / count($draws);
$this->assertEquals( $number,7.0, "Attempting to draw from P(7.0) {$scale} times gives us a value too far from the expected mean. This could be just random chance.", 0.01);

$p = $counter / $scale;
$this->assertEquals(1-$d->cdf($cutoff), $p, "Attempting to draw from P(7.0) {$scale} times gives the wrong number of values greater than {$cutoff}. This could be just random chance.", 0.01);

A single implementation of this sort of testing that can be reused in the tests will have a lot of value in this project. Speed ($scale) is a concern though.

gburtini avatar Mar 15 '16 16:03 gburtini

These heavy tests should be tagged specially and should be optional. Tests used to development should be light and speed.

gustawdaniel avatar Jan 23 '19 04:01 gustawdaniel