Skip to content

Commit b80ecbb

Browse files
committed
random: Add tests for Randomizer::getFloat()
1 parent 18f2ab8 commit b80ecbb

File tree

3 files changed

+110
-1
lines changed

3 files changed

+110
-1
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
--TEST--
2+
Random: Randomizer: getFloat(): Basic functionality
3+
--FILE--
4+
<?php
5+
6+
use Random\Engine;
7+
use Random\Engine\Mt19937;
8+
use Random\Engine\PcgOneseq128XslRr64;
9+
use Random\Engine\Secure;
10+
use Random\Engine\Test\TestShaEngine;
11+
use Random\Engine\Xoshiro256StarStar;
12+
use Random\IntervalBoundary;
13+
use Random\Randomizer;
14+
15+
require __DIR__ . "/../../engines.inc";
16+
17+
$engines = [];
18+
$engines[] = new Mt19937(null, MT_RAND_MT19937);
19+
$engines[] = new Mt19937(null, MT_RAND_PHP);
20+
$engines[] = new PcgOneseq128XslRr64();
21+
$engines[] = new Xoshiro256StarStar();
22+
$engines[] = new Secure();
23+
$engines[] = new TestShaEngine();
24+
25+
foreach ($engines as $engine) {
26+
echo $engine::class, PHP_EOL;
27+
28+
$randomizer = new Randomizer($engine);
29+
30+
// Basic range test.
31+
for ($i = 0.0; $i < 10_000.0; $i += 1.2345) {
32+
$result = $randomizer->getFloat(-$i, $i, IntervalBoundary::ClosedClosed);
33+
34+
if ($result > $i || $result < -$i) {
35+
die("failure: out of range at {$i}");
36+
}
37+
}
38+
}
39+
40+
die('success');
41+
42+
?>
43+
--EXPECT--
44+
Random\Engine\Mt19937
45+
Random\Engine\Mt19937
46+
Random\Engine\PcgOneseq128XslRr64
47+
Random\Engine\Xoshiro256StarStar
48+
Random\Engine\Secure
49+
Random\Engine\Test\TestShaEngine
50+
success
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
--TEST--
2+
Random: Randomizer: getFloat(): Parameters are correctly validated
3+
--FILE--
4+
<?php
5+
6+
use Random\IntervalBoundary;
7+
use Random\Randomizer;
8+
9+
function randomizer(): Randomizer
10+
{
11+
return new Randomizer();
12+
}
13+
14+
foreach ([
15+
IntervalBoundary::ClosedClosed,
16+
IntervalBoundary::ClosedOpen,
17+
IntervalBoundary::OpenClosed,
18+
IntervalBoundary::OpenOpen,
19+
] as $boundary) {
20+
echo $boundary->name, PHP_EOL;
21+
22+
try {
23+
var_dump(randomizer()->getFloat(0.0, -0.1, $boundary));
24+
} catch (ValueError $e) {
25+
echo $e->getMessage(), PHP_EOL;
26+
}
27+
28+
try {
29+
var_dump(randomizer()->getFloat(0.0, 0.0, $boundary));
30+
} catch (ValueError $e) {
31+
echo $e->getMessage(), PHP_EOL;
32+
}
33+
34+
try {
35+
// Both values round to the same float.
36+
var_dump(randomizer()->getFloat(100_000_000_000_000_000.0, 100_000_000_000_000_000.1, $boundary));
37+
} catch (ValueError $e) {
38+
echo $e->getMessage(), PHP_EOL;
39+
}
40+
}
41+
42+
?>
43+
--EXPECT--
44+
ClosedClosed
45+
Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than or equal to argument #1 ($min)
46+
float(0)
47+
float(1.0E+17)
48+
ClosedOpen
49+
Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)
50+
Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)
51+
Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)
52+
OpenClosed
53+
Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)
54+
Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)
55+
Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)
56+
OpenOpen
57+
Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)
58+
Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)
59+
Random\Randomizer::getFloat(): Argument #2 ($max) must be greater than argument #1 ($min)

ext/random/tests/03_randomizer/methods/nextFloat.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ foreach ($engines as $engine) {
3030
for ($i = 0; $i < 10_000; $i++) {
3131
$result = $randomizer->nextFloat();
3232

33-
if ($result < 0 || $result >= 1) {
33+
if ($result >= 1 || $result < 0) {
3434
die("failure: out of range at {$i}");
3535
}
3636
}

0 commit comments

Comments
 (0)