Skip to content

Commit ce77fbf

Browse files
committed
Add failing tests
1 parent dc87eb0 commit ce77fbf

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

Diff for: tests/PHPStan/Analyser/nsrt/array_udiff.php

+24-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
* @param array<int, int> $array3
1111
* @param list<string> $list
1212
* @param non-empty-array<int> $nonEmptyArray
13+
* @param array{foo: string, 0?: int} $arrayShape1
14+
* @param array{foo: string, bar?: int} $arrayShape2
1315
*/
14-
function test(array $array1, array $array2, array $array3, array $list, array $nonEmptyArray): void
16+
function test(array $array1, array $array2, array $array3, array $list, array $nonEmptyArray, array $arrayShape1, array $arrayShape2): void
1517
{
1618
assertType('array<int|string, int>', array_udiff($array1, $array2, static function (mixed $a, mixed $b) {
1719
assertType('int', $a);
@@ -68,4 +70,25 @@ function test(array $array1, array $array2, array $array3, array $list, array $n
6870

6971
return $a <=> $b;
7072
}));
73+
74+
assertType('array<int|string, int>', array_udiff($array1, $arrayShape1, static function (mixed $a, mixed $b) {
75+
assertType('int', $a);
76+
assertType('int|string', $b);
77+
78+
return $a <=> $b;
79+
}));
80+
81+
assertType("array<'foo'|0, int|string>", array_udiff($arrayShape1, $array1, static function (mixed $a, mixed $b) {
82+
assertType('int|string', $a);
83+
assertType('int', $b);
84+
85+
return $a <=> $b;
86+
}));
87+
88+
assertType("array<'bar'|'foo', string>", array_udiff($arrayShape2, $array1, static function (mixed $a, mixed $b) {
89+
assertType('int|string', $a);
90+
assertType('int', $b);
91+
92+
return $a <=> $b;
93+
}));
7194
}

Diff for: tests/PHPStan/Analyser/nsrt/array_uintersect.php

+24-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
* @param array<int, int> $array3
1111
* @param list<string> $list
1212
* @param non-empty-array<int> $nonEmptyArray
13+
* @param array{foo: string, 0?: int} $arrayShape1
14+
* @param array{foo: string, bar?: int} $arrayShape2
1315
*/
14-
function test(array $array1, array $array2, array $array3, array $list, array $nonEmptyArray): void
16+
function test(array $array1, array $array2, array $array3, array $list, array $nonEmptyArray, array $arrayShape1, array $arrayShape2): void
1517
{
1618
assertType('array<int|string, int>', array_uintersect($array1, $array2, static function (mixed $a, mixed $b) {
1719
assertType('int', $a);
@@ -68,4 +70,25 @@ function test(array $array1, array $array2, array $array3, array $list, array $n
6870

6971
return $a <=> $b;
7072
}));
73+
74+
assertType('array<int|string, int>', array_uintersect($array1, $arrayShape1, static function (mixed $a, mixed $b) {
75+
assertType('int', $a);
76+
assertType('int|string', $b);
77+
78+
return $a <=> $b;
79+
}));
80+
81+
assertType("array<'foo'|0, int|string>", array_uintersect($arrayShape1, $array1, static function (mixed $a, mixed $b) {
82+
assertType('int|string', $a);
83+
assertType('int', $b);
84+
85+
return $a <=> $b;
86+
}));
87+
88+
assertType("array<'bar'|'foo', string>", array_uintersect($arrayShape2, $array1, static function (mixed $a, mixed $b) {
89+
assertType('int|string', $a);
90+
assertType('int', $b);
91+
92+
return $a <=> $b;
93+
}));
7194
}

0 commit comments

Comments
 (0)