packages/ztd-query-core/tests/Unit/Shadow/Row/RowMultisetTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Shadow\Row;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Shadow\Row\RowMatch;
11use ZtdQuery\Shadow\Row\RowMultiset;
12
13#[CoversClass(RowMultiset::class)]
14#[UsesClass(RowMatch::class)]
15final class RowMultisetTest extends TestCase
16{
17    public function testDifferenceAnswersTheRowsNothingOnTheOtherSidePairsWith(): void
18    {
19        self::assertSame(
20            [['id' => 2]],
21            (new RowMultiset())->difference([['id' => 1], ['id' => 2]], [['id' => 1]]),
22        );
23    }
24
25    public function testDifferencePairsOffARepeatedRowOnlyOnce(): void
26    {
27        self::assertSame(
28            [['id' => 1]],
29            (new RowMultiset())->difference([['id' => 1], ['id' => 1]], [['id' => 1]]),
30        );
31    }
32
33    public function testDifferenceIsNothingWhereEveryRowIsPairedOff(): void
34    {
35        self::assertSame([], (new RowMultiset())->difference([['id' => 1]], [['id' => 1], ['id' => 2]]));
36    }
37
38    public function testDifferenceIgnoresTheOrderTheColumnsWereReadIn(): void
39    {
40        self::assertSame(
41            [],
42            (new RowMultiset())->difference([['id' => 1, 'name' => 'a']], [['name' => 'a', 'id' => 1]]),
43        );
44    }
45}
46