forked from phpstan/phpstan-src
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharray-flip.php
More file actions
95 lines (80 loc) · 2.11 KB
/
Copy patharray-flip.php
File metadata and controls
95 lines (80 loc) · 2.11 KB
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
94
95
<?php
namespace ArrayFlip;
use function PHPStan\Testing\assertType;
/**
* @param int[] $integerList
*/
function foo($integerList)
{
$flip = array_flip($integerList);
assertType('array<int, (int|string)>', $flip);
}
/**
* @param mixed[] $list
*/
function foo3($list)
{
$flip = array_flip($list);
assertType('array<(int|string)>', $flip);
}
/**
* @param array<int, 1|2|3> $array
*/
function foo4($array)
{
$flip = array_flip($array);
assertType('array<1|2|3, int>', $flip);
}
/**
* @param array<1|2|3, string> $array
*/
function foo5($array)
{
$flip = array_flip($array);
assertType('array<string, 1|2|3>', $flip);
}
/**
* @param non-empty-array<1|2|3, 4|5|6> $array
*/
function foo6($array)
{
$flip = array_flip($array);
assertType('non-empty-array<4|5|6, 1|2|3>', $flip);
}
/**
* @param list<1|2|3> $array
*/
function foo7($array)
{
$flip = array_flip($array);
assertType('array<1|2|3, int<0, max>>', $flip);
}
function foo8($mixed)
{
assertType('mixed', $mixed);
$mixed = array_flip($mixed);
assertType('array', $mixed);
}
/** @param array<string, int> $array */
function foo10(array $array)
{
if (array_key_exists('foo', $array)) {
assertType('non-empty-array<string, int>&hasOffset(\'foo\')', $array);
assertType('non-empty-array<int, string>', array_flip($array));
}
if (array_key_exists('foo', $array) && is_int($array['foo'])) {
assertType("non-empty-array<string, int>&hasOffsetValue('foo', int)", $array);
assertType('non-empty-array<int, string>', array_flip($array));
}
if (array_key_exists('foo', $array) && $array['foo'] === 17) {
assertType("non-empty-array<string, int>&hasOffsetValue('foo', 17)", $array);
assertType("non-empty-array<int, string>&hasOffsetValue(17, 'foo')", array_flip($array));
}
if (
array_key_exists('foo', $array) && $array['foo'] === 17
&& array_key_exists('bar', $array) && $array['bar'] === 17
) {
assertType("non-empty-array<string, int>&hasOffsetValue('bar', 17)&hasOffsetValue('foo', 17)", $array);
assertType("*NEVER*", array_flip($array)); // this could be array<string, int>&hasOffsetValue(17, 'bar') according to https://3v4l.org/1TAFk
}
}