MediaWiki
REL1_24
|
00001 <?php 00008 class ArrayUtilsTest extends MediaWikiTestCase { 00009 private $search; 00010 00015 function testFindLowerBound( 00016 $valueCallback, $valueCount, $comparisonCallback, $target, $expected 00017 ) { 00018 $this->assertSame( 00019 ArrayUtils::findLowerBound( 00020 $valueCallback, $valueCount, $comparisonCallback, $target 00021 ), $expected 00022 ); 00023 } 00024 00025 function provideFindLowerBound() { 00026 $self = $this; 00027 $indexValueCallback = function ( $size ) use ( $self ) { 00028 return function ( $val ) use ( $self, $size ) { 00029 $self->assertTrue( $val >= 0 ); 00030 $self->assertTrue( $val < $size ); 00031 return $val; 00032 }; 00033 }; 00034 $comparisonCallback = function ( $a, $b ) { 00035 return $a - $b; 00036 }; 00037 00038 return array( 00039 array( 00040 $indexValueCallback( 0 ), 00041 0, 00042 $comparisonCallback, 00043 1, 00044 false, 00045 ), 00046 array( 00047 $indexValueCallback( 1 ), 00048 1, 00049 $comparisonCallback, 00050 -1, 00051 false, 00052 ), 00053 array( 00054 $indexValueCallback( 1 ), 00055 1, 00056 $comparisonCallback, 00057 0, 00058 0, 00059 ), 00060 array( 00061 $indexValueCallback( 1 ), 00062 1, 00063 $comparisonCallback, 00064 1, 00065 0, 00066 ), 00067 array( 00068 $indexValueCallback( 2 ), 00069 2, 00070 $comparisonCallback, 00071 -1, 00072 false, 00073 ), 00074 array( 00075 $indexValueCallback( 2 ), 00076 2, 00077 $comparisonCallback, 00078 0, 00079 0, 00080 ), 00081 array( 00082 $indexValueCallback( 2 ), 00083 2, 00084 $comparisonCallback, 00085 0.5, 00086 0, 00087 ), 00088 array( 00089 $indexValueCallback( 2 ), 00090 2, 00091 $comparisonCallback, 00092 1, 00093 1, 00094 ), 00095 array( 00096 $indexValueCallback( 2 ), 00097 2, 00098 $comparisonCallback, 00099 1.5, 00100 1, 00101 ), 00102 array( 00103 $indexValueCallback( 3 ), 00104 3, 00105 $comparisonCallback, 00106 1, 00107 1, 00108 ), 00109 array( 00110 $indexValueCallback( 3 ), 00111 3, 00112 $comparisonCallback, 00113 1.5, 00114 1, 00115 ), 00116 array( 00117 $indexValueCallback( 3 ), 00118 3, 00119 $comparisonCallback, 00120 2, 00121 2, 00122 ), 00123 array( 00124 $indexValueCallback( 3 ), 00125 3, 00126 $comparisonCallback, 00127 3, 00128 2, 00129 ), 00130 ); 00131 } 00132 00137 function testArrayDiffAssocRecursive( $expected ) { 00138 $args = func_get_args(); 00139 array_shift( $args ); 00140 $this->assertEquals( call_user_func_array( 00141 'ArrayUtils::arrayDiffAssocRecursive', $args 00142 ), $expected ); 00143 } 00144 00145 function provideArrayDiffAssocRecursive() { 00146 return array( 00147 array( 00148 array(), 00149 array(), 00150 array(), 00151 ), 00152 array( 00153 array(), 00154 array(), 00155 array(), 00156 array(), 00157 ), 00158 array( 00159 array( 1 ), 00160 array( 1 ), 00161 array(), 00162 ), 00163 array( 00164 array( 1 ), 00165 array( 1 ), 00166 array(), 00167 array(), 00168 ), 00169 array( 00170 array(), 00171 array(), 00172 array( 1 ), 00173 ), 00174 array( 00175 array(), 00176 array(), 00177 array( 1 ), 00178 array( 2 ), 00179 ), 00180 array( 00181 array( '' => 1 ), 00182 array( '' => 1 ), 00183 array(), 00184 ), 00185 array( 00186 array(), 00187 array(), 00188 array( '' => 1 ), 00189 ), 00190 array( 00191 array( 1 ), 00192 array( 1 ), 00193 array( 2 ), 00194 ), 00195 array( 00196 array(), 00197 array( 1 ), 00198 array( 2 ), 00199 array( 1 ), 00200 ), 00201 array( 00202 array(), 00203 array( 1 ), 00204 array( 1, 2 ), 00205 ), 00206 array( 00207 array( 1 => 1 ), 00208 array( 1 => 1 ), 00209 array( 1 ), 00210 ), 00211 array( 00212 array(), 00213 array( 1 => 1 ), 00214 array( 1 ), 00215 array( 1 => 1), 00216 ), 00217 array( 00218 array(), 00219 array( 1 => 1 ), 00220 array( 1, 1, 1 ), 00221 ), 00222 array( 00223 array(), 00224 array( array() ), 00225 array(), 00226 ), 00227 array( 00228 array(), 00229 array( array( array() ) ), 00230 array(), 00231 ), 00232 array( 00233 array( 1, array( 1 ) ), 00234 array( 1, array( 1 ) ), 00235 array(), 00236 ), 00237 array( 00238 array( 1 ), 00239 array( 1, array( 1 ) ), 00240 array( 2, array( 1 ) ), 00241 ), 00242 array( 00243 array(), 00244 array( 1, array( 1 ) ), 00245 array( 2, array( 1 ) ), 00246 array( 1, array( 2 ) ), 00247 ), 00248 array( 00249 array( 1 ), 00250 array( 1, array() ), 00251 array( 2 ), 00252 ), 00253 array( 00254 array(), 00255 array( 1, array() ), 00256 array( 2 ), 00257 array( 1 ), 00258 ), 00259 array( 00260 array( 1, array( 1 => 2 ) ), 00261 array( 1, array( 1, 2 ) ), 00262 array( 2, array( 1 ) ), 00263 ), 00264 array( 00265 array( 1 ), 00266 array( 1, array( 1, 2 ) ), 00267 array( 2, array( 1 ) ), 00268 array( 2, array( 1 => 2 ) ), 00269 ), 00270 array( 00271 array( 1 => array( 1, 2 ) ), 00272 array( 1, array( 1, 2 ) ), 00273 array( 1, array( 2 ) ), 00274 ), 00275 array( 00276 array( 1 => array( array( 2, 3 ), 2 ) ), 00277 array( 1, array( array( 2, 3 ), 2 ) ), 00278 array( 1, array( 2 ) ), 00279 ), 00280 array( 00281 array( 1 => array( array( 2 ), 2 ) ), 00282 array( 1, array( array( 2, 3 ), 2 ) ), 00283 array( 1, array( array( 1 => 3 ) ) ), 00284 ), 00285 array( 00286 array( 1 => array( 1 => 2 ) ), 00287 array( 1, array( array( 2, 3 ), 2 ) ), 00288 array( 1, array( array( 1 => 3, 0 => 2 ) ) ), 00289 ), 00290 array( 00291 array( 1 => array( 1 => 2 ) ), 00292 array( 1, array( array( 2, 3 ), 2 ) ), 00293 array( 1, array( array( 1 => 3 ) ) ), 00294 array( 1 => array( array( 2 ) ) ), 00295 ), 00296 array( 00297 array(), 00298 array( 1, array( array( 2, 3 ), 2 ) ), 00299 array( 1 => array( 1 => 2, 0 => array( 1 => 3, 0 => 2 ) ), 0 => 1 ), 00300 ), 00301 array( 00302 array(), 00303 array( 1, array( array( 2, 3 ), 2 ) ), 00304 array( 1 => array( 1 => 2 ) ), 00305 array( 1 => array( array( 1 => 3 ) ) ), 00306 array( 1 => array( array( 2 ) ) ), 00307 array( 1 ), 00308 ), 00309 ); 00310 } 00311 }