File tree Expand file tree Collapse file tree 2 files changed +90
-0
lines changed
ext/random/tests/03_randomizer/methods Expand file tree Collapse file tree 2 files changed +90
-0
lines changed Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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)
You can’t perform that action at this time.
0 commit comments