File: DeepComparerTest.php

package info (click to toggle)
php-json-schema 6.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,216 kB
  • sloc: php: 9,403; makefile: 153; python: 28; sh: 13
file content (93 lines) | stat: -rw-r--r-- 3,288 bytes parent folder | download | duplicates (2)
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];
            }
        }
    }
}