|
| 1 | +<?php |
| 2 | + |
| 3 | +declare(strict_types=1); |
| 4 | + |
| 5 | +namespace BenTools\IterableFunctions\Tests; |
| 6 | + |
| 7 | +use Generator; |
| 8 | +use SplFixedArray; |
| 9 | + |
| 10 | +use function array_merge; |
| 11 | +use function BenTools\IterableFunctions\iterable; |
| 12 | +use function BenTools\IterableFunctions\iterable_merge; |
| 13 | +use function BenTools\IterableFunctions\iterable_to_array; |
| 14 | +use function it; |
| 15 | +use function PHPUnit\Framework\assertEquals; |
| 16 | +use function PHPUnit\Framework\assertSame; |
| 17 | + |
| 18 | +it('can be called without parameters', function (): void { |
| 19 | + /** @phpstan-ignore-next-line */ |
| 20 | + assertEquals(iterable(null), iterable_merge()); |
| 21 | +}); |
| 22 | + |
| 23 | +it('merges an array', function (): void { |
| 24 | + $iterable = [0 => 'zero', 1 => 'one']; |
| 25 | + $array = [2 => 'two']; |
| 26 | + assertSame([0 => 'zero', 1 => 'one', 2 => 'two'], iterable_to_array(iterable_merge($iterable, $array))); |
| 27 | +}); |
| 28 | + |
| 29 | +it('merges multiples values', function (): void { |
| 30 | + $iterable = [0 => 'zero', 1 => 'one']; |
| 31 | + $array1 = [2 => 'two']; |
| 32 | + $array2 = [3 => 'three', 4 => 'four']; |
| 33 | + assertSame( |
| 34 | + [0 => 'zero', 1 => 'one', 2 => 'two', 3 => 'three', 4 => 'four'], |
| 35 | + iterable_to_array(iterable_merge($iterable, $array1, $array2)), |
| 36 | + ); |
| 37 | +}); |
| 38 | + |
| 39 | +it('merges a Traversable object', function (): void { |
| 40 | + $iterable = SplFixedArray::fromArray([0 => 'zero', 1 => 'one']); |
| 41 | + $array = [2 => 'two']; |
| 42 | + $merged = iterable_merge($iterable, $array); |
| 43 | + assertSame([0 => 'zero', 1 => 'one', 2 => 'two'], iterable_to_array($merged)); |
| 44 | +}); |
| 45 | + |
| 46 | +it('iterable_merge should be equals to array_merge result', function (): void { |
| 47 | + $array1 = ['bar', 'baz']; |
| 48 | + $array2 = ['bat', 'baz']; |
| 49 | + /** @var callable(): Generator<int, string> $generator1 */ |
| 50 | + $generator1 = fn () => yield from $array1; |
| 51 | + /** @var callable(): Generator<int, string> $generator2 */ |
| 52 | + $generator2 = fn () => yield from $array2; |
| 53 | + |
| 54 | + assertSame( |
| 55 | + array_merge($array1, $array2), |
| 56 | + iterable_merge($generator1(), $generator2())->asArray(), |
| 57 | + ); |
| 58 | +})->with(function (): Generator { |
| 59 | + yield 'simple array' => [ |
| 60 | + ['bar', 'baz'], |
| 61 | + ['bat', 'baz'], |
| 62 | + ]; |
| 63 | + |
| 64 | + yield 'associative array' => [ |
| 65 | + ['key1' => 'bar', 'key2' => 'baz'], |
| 66 | + ['key3' => 'bat', 'key4' => 'baz'], |
| 67 | + ]; |
| 68 | + |
| 69 | + yield 'associative array with duplicate keys' => [ |
| 70 | + ['bar' => 'bar', 'baz' => 'baz'], |
| 71 | + ['bat' => 'bat', 'baz' => 'baz'], |
| 72 | + ]; |
| 73 | +}); |
0 commit comments