MediaWiki  REL1_24
ArrayUtilsTest.php
Go to the documentation of this file.
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 }