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