mirror of
https://github.com/ramsey/uuid.git
synced 2026-06-20 16:57:36 +03:00
Merge branch '4.x' into 5.x
This commit is contained in:
@@ -16,6 +16,8 @@ use Ramsey\Uuid\Test\TestCase;
|
||||
|
||||
class UnixTimeGeneratorTest extends TestCase
|
||||
{
|
||||
private const ITERATIONS = 2000;
|
||||
|
||||
#[RunInSeparateProcess]
|
||||
#[PreserveGlobalState(false)]
|
||||
public function testGenerate(): void
|
||||
@@ -33,7 +35,11 @@ class UnixTimeGeneratorTest extends TestCase
|
||||
|
||||
$bytes = $unixTimeGenerator->generate(null, null, $dateTime);
|
||||
|
||||
$this->assertSame($expectedBytes, $bytes);
|
||||
$this->assertSame(
|
||||
$expectedBytes,
|
||||
$bytes,
|
||||
'Failed asserting that "' . bin2hex($bytes) . '" is equal to "' . bin2hex($expectedBytes) . '"',
|
||||
);
|
||||
}
|
||||
|
||||
#[RunInSeparateProcess]
|
||||
@@ -44,9 +50,13 @@ class UnixTimeGeneratorTest extends TestCase
|
||||
$unixTimeGenerator = new UnixTimeGenerator($randomGenerator);
|
||||
|
||||
$previous = '';
|
||||
for ($i = 0; $i < 25; $i++) {
|
||||
for ($i = 0; $i < self::ITERATIONS; $i++) {
|
||||
$bytes = $unixTimeGenerator->generate();
|
||||
$this->assertTrue($bytes > $previous);
|
||||
$this->assertTrue(
|
||||
$bytes > $previous,
|
||||
'Failed on iteration ' . $i . ' when evaluating ' . bin2hex($bytes) . ' > ' . bin2hex($previous),
|
||||
);
|
||||
$previous = $bytes;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,9 +69,13 @@ class UnixTimeGeneratorTest extends TestCase
|
||||
$unixTimeGenerator = new UnixTimeGenerator($randomGenerator);
|
||||
|
||||
$previous = '';
|
||||
for ($i = 0; $i < 25; $i++) {
|
||||
for ($i = 0; $i < self::ITERATIONS; $i++) {
|
||||
$bytes = $unixTimeGenerator->generate(null, null, $dateTime);
|
||||
$this->assertTrue($bytes > $previous);
|
||||
$this->assertTrue(
|
||||
$bytes > $previous,
|
||||
'Failed on iteration ' . $i . ' when evaluating ' . bin2hex($bytes) . ' > ' . bin2hex($previous),
|
||||
);
|
||||
$previous = $bytes;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,9 +87,13 @@ class UnixTimeGeneratorTest extends TestCase
|
||||
$unixTimeGenerator = new UnixTimeGenerator($randomGenerator, 4);
|
||||
|
||||
$previous = '';
|
||||
for ($i = 0; $i < 25; $i++) {
|
||||
for ($i = 0; $i < self::ITERATIONS; $i++) {
|
||||
$bytes = $unixTimeGenerator->generate();
|
||||
$this->assertTrue($bytes > $previous);
|
||||
$this->assertTrue(
|
||||
$bytes > $previous,
|
||||
'Failed on iteration ' . $i . ' when evaluating ' . bin2hex($bytes) . ' > ' . bin2hex($previous),
|
||||
);
|
||||
$previous = $bytes;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,9 +106,13 @@ class UnixTimeGeneratorTest extends TestCase
|
||||
$unixTimeGenerator = new UnixTimeGenerator($randomGenerator, 4);
|
||||
|
||||
$previous = '';
|
||||
for ($i = 0; $i < 25; $i++) {
|
||||
for ($i = 0; $i < self::ITERATIONS; $i++) {
|
||||
$bytes = $unixTimeGenerator->generate(null, null, $dateTime);
|
||||
$this->assertTrue($bytes > $previous);
|
||||
$this->assertTrue(
|
||||
$bytes > $previous,
|
||||
'Failed on iteration ' . $i . ' when evaluating ' . bin2hex($bytes) . ' > ' . bin2hex($previous),
|
||||
);
|
||||
$previous = $bytes;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,22 +125,26 @@ class UnixTimeGeneratorTest extends TestCase
|
||||
$randomGenerator->expects()->generate(16)->andReturns(
|
||||
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
|
||||
);
|
||||
$randomGenerator->expects()->generate(10)->times(24)->andReturns(
|
||||
$randomGenerator->allows()->generate(10)->andReturns(
|
||||
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
|
||||
);
|
||||
|
||||
$unixTimeGenerator = new UnixTimeGenerator($randomGenerator);
|
||||
|
||||
$previous = '';
|
||||
for ($i = 0; $i < 25; $i++) {
|
||||
for ($i = 0; $i < self::ITERATIONS; $i++) {
|
||||
$bytes = $unixTimeGenerator->generate();
|
||||
$this->assertTrue($bytes > $previous);
|
||||
$this->assertTrue(
|
||||
$bytes > $previous,
|
||||
'Failed on iteration ' . $i . ' when evaluating ' . bin2hex($bytes) . ' > ' . bin2hex($previous),
|
||||
);
|
||||
$previous = $bytes;
|
||||
}
|
||||
}
|
||||
|
||||
#[RunInSeparateProcess]
|
||||
#[PreserveGlobalState(false)]
|
||||
public function testGenerateProducesMonotonicResultsStartingWithAllBitsSetWithSameDate(): void
|
||||
public function testGenerateRollsOverWithAllBitsSetWithSameDate(): void
|
||||
{
|
||||
$dateTime = new DateTimeImmutable('now');
|
||||
|
||||
@@ -127,17 +153,19 @@ class UnixTimeGeneratorTest extends TestCase
|
||||
$randomGenerator->expects()->generate(16)->andReturns(
|
||||
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
|
||||
);
|
||||
$randomGenerator->expects()->generate(10)->times(24)->andReturns(
|
||||
$randomGenerator->allows()->generate(10)->andReturns(
|
||||
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
|
||||
);
|
||||
|
||||
$unixTimeGenerator = new UnixTimeGenerator($randomGenerator);
|
||||
|
||||
$previous = '';
|
||||
for ($i = 0; $i < 25; $i++) {
|
||||
$bytes = $unixTimeGenerator->generate(null, null, $dateTime);
|
||||
$this->assertTrue($bytes > $previous);
|
||||
}
|
||||
// We can only call this twice before the overflow kicks in, "randomizing" all the bits back to 1's, according to
|
||||
// our mocked random generator. As a result, we can't run this in a loop like with the other monotonicity tests
|
||||
// in this class; it starts failing at the third loop. This is okay, since our goal is to test the overflow.
|
||||
$first = $unixTimeGenerator->generate(null, null, $dateTime);
|
||||
$second = $unixTimeGenerator->generate(null, null, $dateTime);
|
||||
|
||||
$this->assertTrue($second > $first);
|
||||
}
|
||||
|
||||
#[RunInSeparateProcess]
|
||||
@@ -149,22 +177,26 @@ class UnixTimeGeneratorTest extends TestCase
|
||||
$randomGenerator->expects()->generate(16)->andReturns(
|
||||
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
|
||||
);
|
||||
$randomGenerator->expects()->generate(10)->times(24)->andReturns(
|
||||
$randomGenerator->allows()->generate(10)->andReturns(
|
||||
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
|
||||
);
|
||||
|
||||
$unixTimeGenerator = new UnixTimeGenerator($randomGenerator, 4);
|
||||
|
||||
$previous = '';
|
||||
for ($i = 0; $i < 25; $i++) {
|
||||
for ($i = 0; $i < self::ITERATIONS; $i++) {
|
||||
$bytes = $unixTimeGenerator->generate();
|
||||
$this->assertTrue($bytes > $previous);
|
||||
$this->assertTrue(
|
||||
$bytes > $previous,
|
||||
'Failed on iteration ' . $i . ' when evaluating ' . bin2hex($bytes) . ' > ' . bin2hex($previous),
|
||||
);
|
||||
$previous = $bytes;
|
||||
}
|
||||
}
|
||||
|
||||
#[RunInSeparateProcess]
|
||||
#[PreserveGlobalState(false)]
|
||||
public function testGenerateProducesMonotonicResultsStartingWithAllBitsSetWithSameDateFor32BitPath(): void
|
||||
public function testGenerateRollsOverWithAllBitsSetWithSameDateFor32BitPath(): void
|
||||
{
|
||||
$dateTime = new DateTimeImmutable('now');
|
||||
|
||||
@@ -173,16 +205,18 @@ class UnixTimeGeneratorTest extends TestCase
|
||||
$randomGenerator->expects()->generate(16)->andReturns(
|
||||
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
|
||||
);
|
||||
$randomGenerator->expects()->generate(10)->times(24)->andReturns(
|
||||
$randomGenerator->allows()->generate(10)->andReturns(
|
||||
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
|
||||
);
|
||||
|
||||
$unixTimeGenerator = new UnixTimeGenerator($randomGenerator, 4);
|
||||
|
||||
$previous = '';
|
||||
for ($i = 0; $i < 25; $i++) {
|
||||
$bytes = $unixTimeGenerator->generate(null, null, $dateTime);
|
||||
$this->assertTrue($bytes > $previous);
|
||||
}
|
||||
// We can only call this twice before the overflow kicks in, "randomizing" all the bits back to 1's, according to
|
||||
// our mocked random generator. As a result, we can't run this in a loop like with the other monotonicity tests
|
||||
// in this class; it starts failing at the third loop. This is okay, since our goal is to test the overflow.
|
||||
$first = $unixTimeGenerator->generate(null, null, $dateTime);
|
||||
$second = $unixTimeGenerator->generate(null, null, $dateTime);
|
||||
|
||||
$this->assertTrue($second > $first);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user