1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
<?php
declare(strict_types=1);
namespace JsonSchema\Tests\Tool;
use JsonSchema\Tool\DeepComparer;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
class DeepComparerTest extends TestCase
{
#[DataProvider('equalDataProvider')]
public function testComparesDeepEqualForEqualLeftAndRight($left, $right): void
{
self::assertTrue(DeepComparer::isEqual($left, $right));
}
#[DataProvider('notEqualDataProvider')]
public function testComparesDeepEqualForNotEqualLeftAndRight($left, $right): void
{
self::assertFalse(DeepComparer::isEqual($left, $right));
}
public function equalDataProvider(): \Generator
{
yield 'Null null' => [null, null];
yield 'Boolean true' => [true, true];
yield 'Boolean false' => [false, false];
yield 'Integer one' => [1, 1];
yield 'Integer INT MIN' => [PHP_INT_MIN, PHP_INT_MIN];
yield 'Integer INT MAX' => [PHP_INT_MAX, PHP_INT_MAX];
yield 'Float PI' => [M_PI, M_PI];
yield 'String' => ['hello world!', 'hello world!'];
yield 'array of integer' => [[1, 2, 3], [1, 2, 3]];
yield 'object of integer' => [(object) [1, 2, 3], (object) [1, 2, 3]];
yield 'nested objects of integers' => [
(object) [1 => (object) range(1, 10), 2 => (object) range(50, 60)],
(object) [1 => (object) range(1, 10), 2 => (object) range(50, 60)],
];
}
public function notEqualDataProvider(): \Generator
{
yield 'Null true' => [null, true];
yield 'Boolean true/false' => [true, false];
yield 'Integer one/two' => [1, 2];
yield 'Integer INT MIN/MAX' => [PHP_INT_MIN, PHP_INT_MAX];
yield 'Float PI/' => [M_PI, M_E];
yield 'String' => ['hello world!', 'hell0 w0rld!'];
yield 'array of integer with smaller left side' => [[1, 3], [1, 2, 3]];
yield 'array of integer with smaller right side' => [[1, 2, 3], [1, 3]];
yield 'object of integer with smaller left side' => [(object) [1, 3], (object) [1, 2, 3]];
yield 'object of integer with smaller right side' => [(object) [1, 2, 3], (object) [1, 3]];
yield 'nested objects of integers with different left hand side' => [
(object) [1 => (object) range(1, 10), 2 => (object) range(50, 60, 2)],
(object) [1 => (object) range(1, 10), 2 => (object) range(50, 60)],
];
yield 'nested objects of integers with different right hand side' => [
(object) [1 => (object) range(1, 10), 2 => (object) range(50, 60)],
(object) [1 => (object) range(1, 10), 2 => (object) range(50, 60, 2)],
];
$options = [
'boolean' => true,
'integer' => 42,
'float' => M_PI,
'string' => 'hello world!',
'array' => [1, 2, 3],
'object' => (object) [1, 2, 3],
];
foreach ($options as $leftType => $leftValue) {
foreach ($options as $rightType => $rightValue) {
if ($leftType === $rightType) {
continue;
}
yield sprintf('%s vs. %s', $leftType, $rightType) => [$leftValue, $rightValue];
}
}
}
}
|