Skip to content

Commit d58b3da

Browse files
committed
add tests
1 parent 6ab2ac2 commit d58b3da

1 file changed

Lines changed: 95 additions & 0 deletions

File tree

tests/PHPStan/Analyser/nsrt/bug-13747.php

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,64 @@ public function doBar($list): void
7474
}
7575
}
7676

77+
/**
78+
* @param list<int> $listA
79+
* @param non-empty-list<string> $listB
80+
*/
81+
public function doMaybeBar($listA, $listB): void
82+
{
83+
if (rand(0,1)) {
84+
$list = $listA;
85+
} else {
86+
$list = $listB;
87+
}
88+
89+
if (2 <= count($list)) {
90+
assertType('non-empty-list<int|string>&hasOffsetValue(1, int|string)', $list);
91+
assertType('int<2, max>', count($list));
92+
} else {
93+
assertType('list<int|string>', $list);
94+
assertType('int<0, 1>', count($list));
95+
}
96+
}
97+
98+
/**
99+
* @param array<int> $aArray
100+
* @param non-empty-list<string> $aList
101+
*/
102+
public function doMaybeArray($aArray, $aList): void
103+
{
104+
if (rand(0,1)) {
105+
$listOrArray = $aArray;
106+
} else {
107+
$listOrArray = $aList;
108+
}
109+
110+
if (2 <= count($listOrArray)) {
111+
assertType('non-empty-array<int|string>', $listOrArray);
112+
assertType('int<2, max>', count($listOrArray));
113+
} else {
114+
assertType('array<int|string>', $listOrArray);
115+
assertType('int<0, 1>', count($listOrArray));
116+
}
117+
}
118+
119+
/** @param list<int> $list */
120+
public function doMaybeEmpty($list): void
121+
{
122+
if (rand(0,1)) {
123+
$list = [1, 2, 3];
124+
}
125+
126+
if (2 <= count($list)) {
127+
assertType('non-empty-list<int>&hasOffsetValue(1, int)', $list);
128+
assertType('int<2, max>', count($list));
129+
} else {
130+
assertType('list<int>', $list);
131+
assertType('int<0, 1>', count($list));
132+
}
133+
}
134+
77135
/** @param list<int> $list */
78136
public function checkLimit($list): void
79137
{
@@ -96,4 +154,41 @@ public function checkLimit($list): void
96154
}
97155

98156
}
157+
158+
/** @param array<int> $array */
159+
public function countArray($array): void
160+
{
161+
if (count($array) === 0) {
162+
return;
163+
}
164+
165+
if (count($array) > 2) {
166+
assertType('bool', array_key_exists(-1, $array));
167+
assertType('bool', array_key_exists(0, $array));
168+
assertType('bool', array_key_exists(1, $array));
169+
assertType('bool', array_key_exists(2, $array));
170+
assertType('bool', array_key_exists(3, $array));
171+
172+
assertType('non-empty-array<int>', $array);
173+
assertType('int<3, max>', count($array));
174+
} else {
175+
assertType('non-empty-array<int>', $array);
176+
}
177+
assertType('non-empty-array<int>', $array);
178+
179+
if (count($array, COUNT_NORMAL) > 2) {
180+
assertType('non-empty-array<int>', $array);
181+
assertType('int<3, max>', count($array, COUNT_NORMAL));
182+
} else {
183+
assertType('non-empty-array<int>', $array);
184+
}
185+
186+
assertType('non-empty-array<int>', $array);
187+
if (count($array, COUNT_RECURSIVE) > 2) { // COUNT_RECURSIVE on non-recursive array
188+
assertType('non-empty-array<int>', $array);
189+
assertType('int<3, max>', count($array, COUNT_RECURSIVE));
190+
} else {
191+
assertType('non-empty-array<int>', $array);
192+
}
193+
}
99194
}

0 commit comments

Comments
 (0)