random: Perform fewer iterations if SKIP_SLOW_TESTS is set (#12279)

Co-authored-by: Tim Düsterhus <tim@bastelstu.be>
This commit is contained in:
divinity76 2023-09-23 14:48:33 +02:00 committed by GitHub
parent b94ef611e3
commit ab30f27ce3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 24 additions and 13 deletions

View file

@ -21,6 +21,7 @@ final class CountingEngine32 implements Engine
$engines = []; $engines = [];
$engines[] = new CountingEngine32(); $engines[] = new CountingEngine32();
$engines[] = new TestShaEngine(); $engines[] = new TestShaEngine();
$iterations = getenv("SKIP_SLOW_TESTS") ? 3_000 : 10_000;
foreach ($engines as $engine) { foreach ($engines as $engine) {
echo $engine::class, PHP_EOL; echo $engine::class, PHP_EOL;
@ -31,7 +32,7 @@ foreach ($engines as $engine) {
$engine2 = unserialize(serialize($engine)); $engine2 = unserialize(serialize($engine));
for ($i = 0; $i < 10_000; $i++) { for ($i = 0; $i < $iterations; $i++) {
if ($engine->generate() !== $engine2->generate()) { if ($engine->generate() !== $engine2->generate()) {
die("failure: state differs at {$i}"); die("failure: state differs at {$i}");
} }

View file

@ -16,6 +16,7 @@ $engines = [];
$engines[] = new Mt19937(1234); $engines[] = new Mt19937(1234);
$engines[] = new PcgOneseq128XslRr64(1234); $engines[] = new PcgOneseq128XslRr64(1234);
$engines[] = new Xoshiro256StarStar(1234); $engines[] = new Xoshiro256StarStar(1234);
$iterations = getenv("SKIP_SLOW_TESTS") ? 3_000 : 10_000;
foreach ($engines as $engine) { foreach ($engines as $engine) {
echo $engine::class, PHP_EOL; echo $engine::class, PHP_EOL;
@ -23,7 +24,7 @@ foreach ($engines as $engine) {
$native_randomizer = new Randomizer(clone $engine); $native_randomizer = new Randomizer(clone $engine);
$user_randomizer = new Randomizer(new TestWrapperEngine(clone $engine)); $user_randomizer = new Randomizer(new TestWrapperEngine(clone $engine));
for ($i = 0; $i < 10_000; $i++) { for ($i = 0; $i < $iterations; $i++) {
$native = $native_randomizer->getInt(0, $i); $native = $native_randomizer->getInt(0, $i);
$user = $user_randomizer->getInt(0, $i); $user = $user_randomizer->getInt(0, $i);

View file

@ -20,14 +20,15 @@ $engines[] = new PcgOneseq128XslRr64();
$engines[] = new Xoshiro256StarStar(); $engines[] = new Xoshiro256StarStar();
$engines[] = new Secure(); $engines[] = new Secure();
$engines[] = new TestShaEngine(); $engines[] = new TestShaEngine();
// Using 10_000 is very slow.
$iterations = getenv("SKIP_SLOW_TESTS") ? 100 : 1_000;
foreach ($engines as $engine) { foreach ($engines as $engine) {
echo $engine::class, PHP_EOL; echo $engine::class, PHP_EOL;
$randomizer = new Randomizer($engine); $randomizer = new Randomizer($engine);
// Using 10_000 is very slow. for ($i = 1; $i < $iterations; $i++) {
for ($i = 1; $i < 1_000; $i++) {
if (\strlen($randomizer->getBytes($i)) !== $i) { if (\strlen($randomizer->getBytes($i)) !== $i) {
die("failure: incorrect string length at {$i}"); die("failure: incorrect string length at {$i}");
} }

View file

@ -20,6 +20,7 @@ $engines[] = new PcgOneseq128XslRr64();
$engines[] = new Xoshiro256StarStar(); $engines[] = new Xoshiro256StarStar();
$engines[] = new Secure(); $engines[] = new Secure();
$engines[] = new TestShaEngine(); $engines[] = new TestShaEngine();
$iterations = getenv("SKIP_SLOW_TESTS") ? 10 : 250;
foreach ($engines as $engine) { foreach ($engines as $engine) {
echo $engine::class, PHP_EOL; echo $engine::class, PHP_EOL;
@ -28,7 +29,7 @@ foreach ($engines as $engine) {
var_dump($randomizer->getBytesFromString('a', 10)); var_dump($randomizer->getBytesFromString('a', 10));
var_dump($randomizer->getBytesFromString(str_repeat('a', 256), 5)); var_dump($randomizer->getBytesFromString(str_repeat('a', 256), 5));
for ($i = 1; $i < 250; $i++) { for ($i = 1; $i < $iterations; $i++) {
$output = $randomizer->getBytesFromString(str_repeat('ab', $i), 500); $output = $randomizer->getBytesFromString(str_repeat('ab', $i), 500);
// This check can theoretically fail with a chance of 0.5**500. // This check can theoretically fail with a chance of 0.5**500.

View file

@ -21,6 +21,7 @@ $engines[] = new PcgOneseq128XslRr64();
$engines[] = new Xoshiro256StarStar(); $engines[] = new Xoshiro256StarStar();
$engines[] = new Secure(); $engines[] = new Secure();
$engines[] = new TestShaEngine(); $engines[] = new TestShaEngine();
$max = getenv("SKIP_SLOW_TESTS") ? 3_000.0 : 10_000.0;
foreach ($engines as $engine) { foreach ($engines as $engine) {
echo $engine::class, PHP_EOL; echo $engine::class, PHP_EOL;
@ -28,7 +29,7 @@ foreach ($engines as $engine) {
$randomizer = new Randomizer($engine); $randomizer = new Randomizer($engine);
// Basic range test. // Basic range test.
for ($i = 0.0; $i < 10_000.0; $i += 1.2345) { for ($i = 0.0; $i < $max; $i += 1.2345) {
$result = $randomizer->getFloat(-$i, $i, IntervalBoundary::ClosedClosed); $result = $randomizer->getFloat(-$i, $i, IntervalBoundary::ClosedClosed);
if ($result > $i || $result < -$i) { if ($result > $i || $result < -$i) {

View file

@ -20,6 +20,7 @@ $engines[] = new PcgOneseq128XslRr64();
$engines[] = new Xoshiro256StarStar(); $engines[] = new Xoshiro256StarStar();
$engines[] = new Secure(); $engines[] = new Secure();
$engines[] = new TestShaEngine(); $engines[] = new TestShaEngine();
$iterations = getenv("SKIP_SLOW_TESTS") ? 3_000 : 10_000;
foreach ($engines as $engine) { foreach ($engines as $engine) {
echo $engine::class, PHP_EOL; echo $engine::class, PHP_EOL;
@ -27,7 +28,7 @@ foreach ($engines as $engine) {
$randomizer = new Randomizer($engine); $randomizer = new Randomizer($engine);
// Basic range test. // Basic range test.
for ($i = 0; $i < 10_000; $i++) { for ($i = 0; $i < $iterations; $i++) {
$result = $randomizer->getInt(-$i, $i); $result = $randomizer->getInt(-$i, $i);
if ($result > $i || $result < -$i) { if ($result > $i || $result < -$i) {
@ -36,7 +37,7 @@ foreach ($engines as $engine) {
} }
// Test that extreme ranges do not throw. // Test that extreme ranges do not throw.
for ($i = 0; $i < 10_000; $i++) { for ($i = 0; $i < $iterations; $i++) {
$randomizer->getInt(PHP_INT_MIN, PHP_INT_MAX); $randomizer->getInt(PHP_INT_MIN, PHP_INT_MAX);
} }
} }

View file

@ -20,6 +20,7 @@ $engines[] = new PcgOneseq128XslRr64();
$engines[] = new Xoshiro256StarStar(); $engines[] = new Xoshiro256StarStar();
$engines[] = new Secure(); $engines[] = new Secure();
$engines[] = new TestShaEngine(); $engines[] = new TestShaEngine();
$iterations = getenv("SKIP_SLOW_TESTS") ? 3_000 : 10_000;
foreach ($engines as $engine) { foreach ($engines as $engine) {
echo $engine::class, PHP_EOL; echo $engine::class, PHP_EOL;
@ -27,7 +28,7 @@ foreach ($engines as $engine) {
$randomizer = new Randomizer($engine); $randomizer = new Randomizer($engine);
// Basic range test. // Basic range test.
for ($i = 0; $i < 10_000; $i++) { for ($i = 0; $i < $iterations; $i++) {
$result = $randomizer->nextFloat(); $result = $randomizer->nextFloat();
if ($result >= 1 || $result < 0) { if ($result >= 1 || $result < 0) {

View file

@ -20,6 +20,7 @@ $engines[] = new PcgOneseq128XslRr64();
$engines[] = new Xoshiro256StarStar(); $engines[] = new Xoshiro256StarStar();
$engines[] = new Secure(); $engines[] = new Secure();
$engines[] = new TestShaEngine(); $engines[] = new TestShaEngine();
$iterations = getenv("SKIP_SLOW_TESTS") ? 10 : 100;
$array1 = []; // list $array1 = []; // list
$array2 = []; // associative array with only strings $array2 = []; // associative array with only strings
@ -38,7 +39,7 @@ foreach ($engines as $engine) {
$randomizer = new Randomizer($engine); $randomizer = new Randomizer($engine);
for ($i = 1; $i < 100; $i++) { for ($i = 1; $i < $iterations; $i++) {
$result = $randomizer->pickArrayKeys($array1, $i); $result = $randomizer->pickArrayKeys($array1, $i);
if (array_unique($result) !== $result) { if (array_unique($result) !== $result) {

View file

@ -20,6 +20,7 @@ $engines[] = new PcgOneseq128XslRr64();
$engines[] = new Xoshiro256StarStar(); $engines[] = new Xoshiro256StarStar();
$engines[] = new Secure(); $engines[] = new Secure();
$engines[] = new TestShaEngine(); $engines[] = new TestShaEngine();
$length = getenv("SKIP_SLOW_TESTS") ? 1_000 : 5_000;
foreach ($engines as $engine) { foreach ($engines as $engine) {
echo $engine::class, PHP_EOL; echo $engine::class, PHP_EOL;
@ -27,7 +28,7 @@ foreach ($engines as $engine) {
$randomizer = new Randomizer($engine); $randomizer = new Randomizer($engine);
// This test is slow, test all numbers smaller than 50 and then in steps of 677 (which is prime). // This test is slow, test all numbers smaller than 50 and then in steps of 677 (which is prime).
for ($i = 1; $i < 5_000; $i += ($i < 50 ? 1 : 677)) { for ($i = 1; $i < $length; $i += ($i < 50 ? 1 : 677)) {
$array = range(1, $i); $array = range(1, $i);
$result = $randomizer->shuffleArray($array); $result = $randomizer->shuffleArray($array);

View file

@ -20,6 +20,7 @@ $engines[] = new PcgOneseq128XslRr64();
$engines[] = new Xoshiro256StarStar(); $engines[] = new Xoshiro256StarStar();
$engines[] = new Secure(); $engines[] = new Secure();
$engines[] = new TestShaEngine(); $engines[] = new TestShaEngine();
$length = getenv("SKIP_SLOW_TESTS") ? 1_000 : 5_000;
function sort_bytes(string $bytes): string function sort_bytes(string $bytes): string
{ {
@ -34,7 +35,7 @@ foreach ($engines as $engine) {
$randomizer = new Randomizer($engine); $randomizer = new Randomizer($engine);
// This test is slow, test all numbers smaller than 50 and then in steps of 677 (which is prime). // This test is slow, test all numbers smaller than 50 and then in steps of 677 (which is prime).
for ($i = 1; $i < 5_000; $i += ($i < 50 ? 1 : 677)) { for ($i = 1; $i < $length; $i += ($i < 50 ? 1 : 677)) {
$bytes = sort_bytes(random_bytes($i)); $bytes = sort_bytes(random_bytes($i));
$result = $randomizer->shuffleBytes($bytes); $result = $randomizer->shuffleBytes($bytes);

View file

@ -18,6 +18,7 @@ $engines[] = new Mt19937(1234, MT_RAND_PHP);
$engines[] = new PcgOneseq128XslRr64(1234); $engines[] = new PcgOneseq128XslRr64(1234);
$engines[] = new Xoshiro256StarStar(1234); $engines[] = new Xoshiro256StarStar(1234);
$engines[] = new TestShaEngine("1234"); $engines[] = new TestShaEngine("1234");
$iterations = getenv("SKIP_SLOW_TESTS") ? 3_000 : 10_000;
foreach ($engines as $engine) { foreach ($engines as $engine) {
echo $engine::class, PHP_EOL; echo $engine::class, PHP_EOL;
@ -30,7 +31,7 @@ foreach ($engines as $engine) {
$randomizer2 = unserialize(serialize($randomizer)); $randomizer2 = unserialize(serialize($randomizer));
for ($i = 0; $i < 10_000; $i++) { for ($i = 0; $i < $iterations; $i++) {
if ($randomizer->getInt(0, $i) !== $randomizer2->getInt(0, $i)) { if ($randomizer->getInt(0, $i) !== $randomizer2->getInt(0, $i)) {
$className = $engine::class; $className = $engine::class;