@@ -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