1--TEST--
2Random: Randomizer: Native engines can be wrapped without changing their sequence
3--FILE--
4<?php
5
6use Random\Engine;
7use Random\Engine\Mt19937;
8use Random\Engine\PcgOneseq128XslRr64;
9use Random\Engine\Test\TestWrapperEngine;
10use Random\Engine\Xoshiro256StarStar;
11use Random\Randomizer;
12
13require __DIR__ . "/../engines.inc";
14
15$engines = [];
16$engines[] = new Mt19937(1234);
17$engines[] = new PcgOneseq128XslRr64(1234);
18$engines[] = new Xoshiro256StarStar(1234);
19$iterations = getenv("SKIP_SLOW_TESTS") ? 3_000 : 10_000;
20
21foreach ($engines as $engine) {
22    echo $engine::class, PHP_EOL;
23
24    $native_randomizer = new Randomizer(clone $engine);
25    $user_randomizer = new Randomizer(new TestWrapperEngine(clone $engine));
26
27    for ($i = 0; $i < $iterations; $i++) {
28        $native = $native_randomizer->getInt(0, $i);
29        $user = $user_randomizer->getInt(0, $i);
30
31        if ($native !== $user) {
32            die("failure: state differs at {$i}");
33        }
34    }
35}
36
37die('success');
38
39?>
40--EXPECT--
41Random\Engine\Mt19937
42Random\Engine\PcgOneseq128XslRr64
43Random\Engine\Xoshiro256StarStar
44success
45