Skip to content

Commit f0765a0

Browse files
committed
Unify structure for ext/random's randomizer tests
1 parent d1f6a91 commit f0765a0

33 files changed

+860
-583
lines changed

ext/random/tests/02_engine/user_compatibility.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use Random\Engine\PcgOneseq128XslRr64;
99
use Random\Engine\Test\TestWrapperEngine;
1010
use Random\Engine\Xoshiro256StarStar;
1111

12-
include __DIR__ . "/../engines.inc";
12+
require __DIR__ . "/../engines.inc";
1313

1414
$engines = [];
1515
$engines[] = new Mt19937(1234);

ext/random/tests/03_randomizer/basic.phpt

Lines changed: 0 additions & 81 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
--TEST--
2-
Random: Randomizer: pickArrayKeys
2+
Random: Randomizer: The Mt19937 engine and pickArrayKeys are consistent with array_rand()
33
--FILE--
44
<?php
55

6+
use Random\Engine\Mt19937;
7+
use Random\Randomizer;
8+
69
$map = ['foo' => 0, 'bar' => 1, 'baz' => 2];
710
$list = range(1, 10);
811

@@ -14,7 +17,7 @@ $mapPickTwoFunc = array_rand($map, 2);
1417
$listPickOneFunc = array_rand($list, 1);
1518
$listPickTwoFunc = array_rand($list, 2);
1619

17-
$randomizer = new \Random\Randomizer(new \Random\Engine\Mt19937(1234));
20+
$randomizer = new Randomizer(new Mt19937(1234));
1821

1922
[$mapPickOneMethod] = $randomizer->pickArrayKeys($map, 1);
2023
$mapPickTwoMethod = $randomizer->pickArrayKeys($map, 2);
@@ -24,25 +27,30 @@ $listPickTwoMethod = $randomizer->pickArrayKeys($list, 2);
2427

2528
if ($mapPickOneFunc !== $mapPickOneMethod) {
2629
var_dump($mapPickOneFunc, $mapPickOneMethod);
27-
die('failure mapPickOne');
30+
31+
die('failure: mapPickOne');
2832
}
2933

3034
if ($mapPickTwoFunc !== $mapPickTwoMethod) {
3135
var_dump($mapPickTwoFunc, $mapPickTwoMethod);
32-
die('failure mapPickTwo');
36+
37+
die('failure: mapPickTwo');
3338
}
3439

3540
if ($listPickOneFunc !== $listPickOneMethod) {
3641
var_dump($listPickOneFunc, $listPickOneMethod);
37-
die('failure listPickOne');
42+
43+
die('failure: listPickOne');
3844
}
3945

4046
if ($listPickTwoFunc !== $listPickTwoMethod) {
4147
var_dump($listPickTwoFunc, $listPickOneMethod);
42-
die('failure listPickTwo');
48+
49+
die('failure: listPickTwo');
4350
}
4451

4552
die('success');
53+
4654
?>
47-
--EXPECTF--
55+
--EXPECT--
4856
success

ext/random/tests/03_randomizer/compatibility_mt.phpt

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
--TEST--
2+
Random: Randomizer: The Mt19937 engine is a drop-in replacement for mt_rand()
3+
--FILE--
4+
<?php
5+
6+
use Random\Randomizer;
7+
use Random\Engine\Mt19937;
8+
9+
echo "MT_RAND_PHP", PHP_EOL;
10+
11+
$randomizer = new Randomizer(new Mt19937(1234, MT_RAND_PHP));
12+
mt_srand(1234, MT_RAND_PHP);
13+
14+
for ($i = 0; $i < 10_000; $i++) {
15+
if ($randomizer->nextInt() !== mt_rand()) {
16+
die("failure: state differs at {$i} for nextInt()");
17+
}
18+
}
19+
20+
for ($i = 0; $i < 10_000; $i++) {
21+
if ($randomizer->getInt(0, $i) !== mt_rand(0, $i)) {
22+
die("failure: state differs at {$i} for getInt()");
23+
}
24+
}
25+
26+
echo "MT_RAND_MT19937", PHP_EOL;
27+
28+
$randomizer = new Randomizer(new Mt19937(1234, MT_RAND_MT19937));
29+
mt_srand(1234, MT_RAND_MT19937);
30+
31+
for ($i = 0; $i < 10_000; $i++) {
32+
if ($randomizer->nextInt() !== mt_rand()) {
33+
die("failure: state differs at {$i} for nextInt()");
34+
}
35+
}
36+
37+
for ($i = 0; $i < 10_000; $i++) {
38+
if ($randomizer->getInt(0, $i) !== mt_rand(0, $i)) {
39+
die("failure: state differs at {$i} for getInt()");
40+
}
41+
}
42+
43+
die('success');
44+
45+
?>
46+
--EXPECT--
47+
MT_RAND_PHP
48+
MT_RAND_MT19937
49+
success
Lines changed: 25 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,43 @@
11
--TEST--
2-
Random: Randomizer: Compatibility: user
2+
Random: Randomizer: Native engines can be wrapped without changing their sequence
33
--FILE--
44
<?php
55

6-
$native_randomizer = new \Random\Randomizer(new \Random\Engine\Mt19937(1234));
7-
$user_randomizer = new \Random\Randomizer(new class () implements \Random\Engine {
8-
public function __construct(private $engine = new \Random\Engine\Mt19937(1234))
9-
{
10-
}
6+
use Random\Engine;
7+
use Random\Engine\Mt19937;
8+
use Random\Engine\PcgOneseq128XslRr64;
9+
use Random\Engine\Test\TestWrapperEngine;
10+
use Random\Engine\Xoshiro256StarStar;
11+
use Random\Randomizer;
1112

12-
public function generate(): string
13-
{
14-
return $this->engine->generate();
15-
}
16-
});
17-
for ($i = 0; $i < 1000; $i++) {
18-
$native = $native_randomizer->nextInt();
19-
$user = $user_randomizer->nextInt();
20-
if ($native !== $user) {
21-
die("failure Mt19937 i: {$i} native: {$native} user: {$user}");
22-
}
23-
}
13+
require __DIR__ . "/../engines.inc";
2414

25-
try {
26-
$native_randomizer = new \Random\Randomizer(new \Random\Engine\PcgOneseq128XslRr64(1234));
27-
$user_randomizer = new \Random\Randomizer(new class () implements \Random\Engine {
28-
public function __construct(private $engine = new \Random\Engine\PcgOneseq128XslRr64(1234))
29-
{
30-
}
15+
$engines = [];
16+
$engines[] = new Mt19937(1234);
17+
$engines[] = new PcgOneseq128XslRr64(1234);
18+
$engines[] = new Xoshiro256StarStar(1234);
3119

32-
public function generate(): string
33-
{
34-
return $this->engine->generate();
35-
}
36-
});
37-
38-
for ($i = 0; $i < 1000; $i++) {
39-
$native = $native_randomizer->nextInt();
40-
$user = $user_randomizer->nextInt();
41-
if ($native !== $user) {
42-
die("failure PcgOneseq128XslRr64 i: {$i} native: {$native} user: {$user}");
43-
}
44-
}
45-
} catch (\Random\RandomException $e) {
46-
if ($e->getMessage() !== 'Generated value exceeds size of int') {
47-
throw $e;
48-
}
49-
}
20+
foreach ($engines as $engine) {
21+
echo $engine::class, PHP_EOL;
5022

51-
try {
52-
$native_randomizer = new \Random\Randomizer(new \Random\Engine\Xoshiro256StarStar(1234));
53-
$user_randomizer = new \Random\Randomizer(new class () implements \Random\Engine {
54-
public function __construct(private $engine = new \Random\Engine\Xoshiro256StarStar(1234))
55-
{
56-
}
23+
$native_randomizer = new Randomizer(clone $engine);
24+
$user_randomizer = new Randomizer(new TestWrapperEngine(clone $engine));
25+
26+
for ($i = 0; $i < 10_000; $i++) {
27+
$native = $native_randomizer->getInt(0, $i);
28+
$user = $user_randomizer->getInt(0, $i);
5729

58-
public function generate(): string
59-
{
60-
return $this->engine->generate();
61-
}
62-
});
63-
64-
for ($i = 0; $i < 1000; $i++) {
65-
$native = $native_randomizer->nextInt();
66-
$user = $user_randomizer->nextInt();
6730
if ($native !== $user) {
68-
die("failure Xoshiro256StarStar i: {$i} native: {$native} user: {$user}");
31+
die("failure: state differs at {$i}");
6932
}
7033
}
71-
} catch (\Random\RandomException $e) {
72-
if ($e->getMessage() !== 'Generated value exceeds size of int') {
73-
throw $e;
74-
}
7534
}
7635

7736
die('success');
37+
7838
?>
7939
--EXPECT--
40+
Random\Engine\Mt19937
41+
Random\Engine\PcgOneseq128XslRr64
42+
Random\Engine\Xoshiro256StarStar
8043
success

0 commit comments

Comments
 (0)