Separate MediaWiki unit and integration tests
[lhc/web/wiklou.git] / tests / phpunit / unit / includes / libs / ArrayUtilsTest.php
1 <?php
2 /**
3 * Test class for ArrayUtils class
4 *
5 * @group Database
6 */
7 class ArrayUtilsTest extends PHPUnit\Framework\TestCase {
8
9 use MediaWikiCoversValidator;
10
11 /**
12 * @covers ArrayUtils::findLowerBound
13 * @dataProvider provideFindLowerBound
14 */
15 function testFindLowerBound(
16 $valueCallback, $valueCount, $comparisonCallback, $target, $expected
17 ) {
18 $this->assertSame(
19 ArrayUtils::findLowerBound(
20 $valueCallback, $valueCount, $comparisonCallback, $target
21 ), $expected
22 );
23 }
24
25 function provideFindLowerBound() {
26 $indexValueCallback = function ( $size ) {
27 return function ( $val ) use ( $size ) {
28 $this->assertTrue( $val >= 0 );
29 $this->assertTrue( $val < $size );
30 return $val;
31 };
32 };
33 $comparisonCallback = function ( $a, $b ) {
34 return $a - $b;
35 };
36
37 return [
38 [
39 $indexValueCallback( 0 ),
40 0,
41 $comparisonCallback,
42 1,
43 false,
44 ],
45 [
46 $indexValueCallback( 1 ),
47 1,
48 $comparisonCallback,
49 -1,
50 false,
51 ],
52 [
53 $indexValueCallback( 1 ),
54 1,
55 $comparisonCallback,
56 0,
57 0,
58 ],
59 [
60 $indexValueCallback( 1 ),
61 1,
62 $comparisonCallback,
63 1,
64 0,
65 ],
66 [
67 $indexValueCallback( 2 ),
68 2,
69 $comparisonCallback,
70 -1,
71 false,
72 ],
73 [
74 $indexValueCallback( 2 ),
75 2,
76 $comparisonCallback,
77 0,
78 0,
79 ],
80 [
81 $indexValueCallback( 2 ),
82 2,
83 $comparisonCallback,
84 0.5,
85 0,
86 ],
87 [
88 $indexValueCallback( 2 ),
89 2,
90 $comparisonCallback,
91 1,
92 1,
93 ],
94 [
95 $indexValueCallback( 2 ),
96 2,
97 $comparisonCallback,
98 1.5,
99 1,
100 ],
101 [
102 $indexValueCallback( 3 ),
103 3,
104 $comparisonCallback,
105 1,
106 1,
107 ],
108 [
109 $indexValueCallback( 3 ),
110 3,
111 $comparisonCallback,
112 1.5,
113 1,
114 ],
115 [
116 $indexValueCallback( 3 ),
117 3,
118 $comparisonCallback,
119 2,
120 2,
121 ],
122 [
123 $indexValueCallback( 3 ),
124 3,
125 $comparisonCallback,
126 3,
127 2,
128 ],
129 ];
130 }
131
132 /**
133 * @covers ArrayUtils::arrayDiffAssocRecursive
134 * @dataProvider provideArrayDiffAssocRecursive
135 */
136 function testArrayDiffAssocRecursive( $expected, ...$args ) {
137 $this->assertEquals( call_user_func_array(
138 'ArrayUtils::arrayDiffAssocRecursive', $args
139 ), $expected );
140 }
141
142 function provideArrayDiffAssocRecursive() {
143 return [
144 [
145 [],
146 [],
147 [],
148 ],
149 [
150 [],
151 [],
152 [],
153 [],
154 ],
155 [
156 [ 1 ],
157 [ 1 ],
158 [],
159 ],
160 [
161 [ 1 ],
162 [ 1 ],
163 [],
164 [],
165 ],
166 [
167 [],
168 [],
169 [ 1 ],
170 ],
171 [
172 [],
173 [],
174 [ 1 ],
175 [ 2 ],
176 ],
177 [
178 [ '' => 1 ],
179 [ '' => 1 ],
180 [],
181 ],
182 [
183 [],
184 [],
185 [ '' => 1 ],
186 ],
187 [
188 [ 1 ],
189 [ 1 ],
190 [ 2 ],
191 ],
192 [
193 [],
194 [ 1 ],
195 [ 2 ],
196 [ 1 ],
197 ],
198 [
199 [],
200 [ 1 ],
201 [ 1, 2 ],
202 ],
203 [
204 [ 1 => 1 ],
205 [ 1 => 1 ],
206 [ 1 ],
207 ],
208 [
209 [],
210 [ 1 => 1 ],
211 [ 1 ],
212 [ 1 => 1 ],
213 ],
214 [
215 [],
216 [ 1 => 1 ],
217 [ 1, 1, 1 ],
218 ],
219 [
220 [],
221 [ [] ],
222 [],
223 ],
224 [
225 [],
226 [ [ [] ] ],
227 [],
228 ],
229 [
230 [ 1, [ 1 ] ],
231 [ 1, [ 1 ] ],
232 [],
233 ],
234 [
235 [ 1 ],
236 [ 1, [ 1 ] ],
237 [ 2, [ 1 ] ],
238 ],
239 [
240 [],
241 [ 1, [ 1 ] ],
242 [ 2, [ 1 ] ],
243 [ 1, [ 2 ] ],
244 ],
245 [
246 [ 1 ],
247 [ 1, [] ],
248 [ 2 ],
249 ],
250 [
251 [],
252 [ 1, [] ],
253 [ 2 ],
254 [ 1 ],
255 ],
256 [
257 [ 1, [ 1 => 2 ] ],
258 [ 1, [ 1, 2 ] ],
259 [ 2, [ 1 ] ],
260 ],
261 [
262 [ 1 ],
263 [ 1, [ 1, 2 ] ],
264 [ 2, [ 1 ] ],
265 [ 2, [ 1 => 2 ] ],
266 ],
267 [
268 [ 1 => [ 1, 2 ] ],
269 [ 1, [ 1, 2 ] ],
270 [ 1, [ 2 ] ],
271 ],
272 [
273 [ 1 => [ [ 2, 3 ], 2 ] ],
274 [ 1, [ [ 2, 3 ], 2 ] ],
275 [ 1, [ 2 ] ],
276 ],
277 [
278 [ 1 => [ [ 2 ], 2 ] ],
279 [ 1, [ [ 2, 3 ], 2 ] ],
280 [ 1, [ [ 1 => 3 ] ] ],
281 ],
282 [
283 [ 1 => [ 1 => 2 ] ],
284 [ 1, [ [ 2, 3 ], 2 ] ],
285 [ 1, [ [ 1 => 3, 0 => 2 ] ] ],
286 ],
287 [
288 [ 1 => [ 1 => 2 ] ],
289 [ 1, [ [ 2, 3 ], 2 ] ],
290 [ 1, [ [ 1 => 3 ] ] ],
291 [ 1 => [ [ 2 ] ] ],
292 ],
293 [
294 [],
295 [ 1, [ [ 2, 3 ], 2 ] ],
296 [ 1 => [ 1 => 2, 0 => [ 1 => 3, 0 => 2 ] ], 0 => 1 ],
297 ],
298 [
299 [],
300 [ 1, [ [ 2, 3 ], 2 ] ],
301 [ 1 => [ 1 => 2 ] ],
302 [ 1 => [ [ 1 => 3 ] ] ],
303 [ 1 => [ [ 2 ] ] ],
304 [ 1 ],
305 ],
306 ];
307 }
308 }