Skip to content

Commit 6c610c1

Browse files
committed
random: Add Randomizer::nextFloat() tests
1 parent 0679745 commit 6c610c1

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
--TEST--
2+
Random: Randomizer: nextFloat(): 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\Randomizer;
13+
14+
require __DIR__ . "/../../engines.inc";
15+
16+
$engines = [];
17+
$engines[] = new Mt19937(null, MT_RAND_MT19937);
18+
$engines[] = new Mt19937(null, MT_RAND_PHP);
19+
$engines[] = new PcgOneseq128XslRr64();
20+
$engines[] = new Xoshiro256StarStar();
21+
$engines[] = new Secure();
22+
$engines[] = new TestShaEngine();
23+
24+
foreach ($engines as $engine) {
25+
echo $engine::class, PHP_EOL;
26+
27+
$randomizer = new Randomizer($engine);
28+
29+
// Basic range test.
30+
for ($i = 0; $i < 10_000; $i++) {
31+
$result = $randomizer->nextFloat();
32+
33+
if ($result < 0 || $result >= 1) {
34+
die("failure: out of range at {$i}");
35+
}
36+
}
37+
}
38+
39+
die('success');
40+
41+
?>
42+
--EXPECT--
43+
Random\Engine\Mt19937
44+
Random\Engine\Mt19937
45+
Random\Engine\PcgOneseq128XslRr64
46+
Random\Engine\Xoshiro256StarStar
47+
Random\Engine\Secure
48+
Random\Engine\Test\TestShaEngine
49+
success
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
--TEST--
2+
Random: Randomizer: nextFloat(): Return values are evenly spaced.
3+
--FILE--
4+
<?php
5+
6+
use Random\Engine;
7+
use Random\Randomizer;
8+
9+
final class StaticEngine implements Engine
10+
{
11+
public function __construct(private string $value)
12+
{
13+
}
14+
15+
public function generate(): string
16+
{
17+
return $this->value;
18+
}
19+
}
20+
21+
$zero = new Randomizer(new StaticEngine("\x00\x00\x00\x00\x00\x00\x00\x00"));
22+
$one = new Randomizer(new StaticEngine("\x00\x08\x00\x00\x00\x00\x00\x00"));
23+
$two = new Randomizer(new StaticEngine("\x00\x10\x00\x00\x00\x00\x00\x00"));
24+
25+
$max_minus_two = new Randomizer(new StaticEngine("\x00\xe8\xff\xff\xff\xff\xff\xff"));
26+
$max_minus_one = new Randomizer(new StaticEngine("\x00\xf0\xff\xff\xff\xff\xff\xff"));
27+
$max = new Randomizer(new StaticEngine("\x00\xf8\xff\xff\xff\xff\xff\xff"));
28+
29+
var_dump($one->nextFloat() - $one->nextFloat() === $zero->nextFloat());
30+
var_dump($two->nextFloat() - $one->nextFloat() === $one->nextFloat());
31+
var_dump($max->nextFloat() - $max_minus_one->nextFloat() === $one->nextFloat());
32+
var_dump($max_minus_one->nextFloat() - $max_minus_two->nextFloat() === $one->nextFloat());
33+
var_dump($max->nextFloat() - $max_minus_two->nextFloat() === $two->nextFloat());
34+
35+
?>
36+
--EXPECT--
37+
bool(true)
38+
bool(true)
39+
bool(true)
40+
bool(true)
41+
bool(true)

0 commit comments

Comments
 (0)