assertSame( $base2, wfBaseConvert( $base3, '3', '2' ) ); $this->assertSame( $base2, wfBaseConvert( $base5, '5', '2' ) ); $this->assertSame( $base2, wfBaseConvert( $base8, '8', '2' ) ); $this->assertSame( $base2, wfBaseConvert( $base10, '10', '2' ) ); $this->assertSame( $base2, wfBaseConvert( $base16, '16', '2' ) ); $this->assertSame( $base2, wfBaseConvert( $base36, '36', '2' ) ); } /** * @dataProvider provideSingleDigitConversions */ public function testDigitToBase3( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) { $this->assertSame( $base3, wfBaseConvert( $base2, '2', '3' ) ); $this->assertSame( $base3, wfBaseConvert( $base5, '5', '3' ) ); $this->assertSame( $base3, wfBaseConvert( $base8, '8', '3' ) ); $this->assertSame( $base3, wfBaseConvert( $base10, '10', '3' ) ); $this->assertSame( $base3, wfBaseConvert( $base16, '16', '3' ) ); $this->assertSame( $base3, wfBaseConvert( $base36, '36', '3' ) ); } /** * @dataProvider provideSingleDigitConversions */ public function testDigitToBase5( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) { $this->assertSame( $base5, wfBaseConvert( $base2, '2', '5' ) ); $this->assertSame( $base5, wfBaseConvert( $base3, '3', '5' ) ); $this->assertSame( $base5, wfBaseConvert( $base8, '8', '5' ) ); $this->assertSame( $base5, wfBaseConvert( $base10, '10', '5' ) ); $this->assertSame( $base5, wfBaseConvert( $base16, '16', '5' ) ); $this->assertSame( $base5, wfBaseConvert( $base36, '36', '5' ) ); } /** * @dataProvider provideSingleDigitConversions */ public function testDigitToBase8( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) { $this->assertSame( $base8, wfBaseConvert( $base2, '2', '8' ) ); $this->assertSame( $base8, wfBaseConvert( $base3, '3', '8' ) ); $this->assertSame( $base8, wfBaseConvert( $base5, '5', '8' ) ); $this->assertSame( $base8, wfBaseConvert( $base10, '10', '8' ) ); $this->assertSame( $base8, wfBaseConvert( $base16, '16', '8' ) ); $this->assertSame( $base8, wfBaseConvert( $base36, '36', '8' ) ); } /** * @dataProvider provideSingleDigitConversions */ public function testDigitToBase10( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) { $this->assertSame( $base10, wfBaseConvert( $base2, '2', '10' ) ); $this->assertSame( $base10, wfBaseConvert( $base3, '3', '10' ) ); $this->assertSame( $base10, wfBaseConvert( $base5, '5', '10' ) ); $this->assertSame( $base10, wfBaseConvert( $base8, '8', '10' ) ); $this->assertSame( $base10, wfBaseConvert( $base16, '16', '10' ) ); $this->assertSame( $base10, wfBaseConvert( $base36, '36', '10' ) ); } /** * @dataProvider provideSingleDigitConversions */ public function testDigitToBase16( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) { $this->assertSame( $base16, wfBaseConvert( $base2, '2', '16' ) ); $this->assertSame( $base16, wfBaseConvert( $base3, '3', '16' ) ); $this->assertSame( $base16, wfBaseConvert( $base5, '5', '16' ) ); $this->assertSame( $base16, wfBaseConvert( $base8, '8', '16' ) ); $this->assertSame( $base16, wfBaseConvert( $base10, '10', '16' ) ); $this->assertSame( $base16, wfBaseConvert( $base36, '36', '16' ) ); } /** * @dataProvider provideSingleDigitConversions */ public function testDigitToBase36( $base2, $base3, $base5, $base8, $base10, $base16, $base36 ) { $this->assertSame( $base36, wfBaseConvert( $base2, '2', '36' ) ); $this->assertSame( $base36, wfBaseConvert( $base3, '3', '36' ) ); $this->assertSame( $base36, wfBaseConvert( $base5, '5', '36' ) ); $this->assertSame( $base36, wfBaseConvert( $base8, '8', '36' ) ); $this->assertSame( $base36, wfBaseConvert( $base10, '10', '36' ) ); $this->assertSame( $base36, wfBaseConvert( $base16, '16', '36' ) ); } public function testLargeNumber() { $this->assertSame( '1100110001111010000000101110100', wfBaseConvert( 'sd89ys', 36, 2 ) ); $this->assertSame( '11102112120221201101', wfBaseConvert( 'sd89ys', 36, 3 ) ); $this->assertSame( '12003102232400', wfBaseConvert( 'sd89ys', 36, 5 ) ); $this->assertSame( '14617200564', wfBaseConvert( 'sd89ys', 36, 8 ) ); $this->assertSame( '1715274100', wfBaseConvert( 'sd89ys', 36, 10 ) ); $this->assertSame( '663d0174', wfBaseConvert( 'sd89ys', 36, 16 ) ); } public static function provideNumbers() { $x = array(); $chars = '0123456789abcdefghijklmnopqrstuvwxyz'; for ( $i = 0; $i < 50; $i++ ) { $base = mt_rand( 2, 36 ); $len = mt_rand( 10, 100 ); $str = ''; for ( $j = 0; $j < $len; $j++ ) { $str .= $chars[mt_rand( 0, $base - 1 )]; } $x[] = array( $base, $str ); } return $x; } /** * @dataProvider provideNumbers */ public function testIdentity( $base, $number ) { $this->assertSame( $number, wfBaseConvert( $number, $base, $base, strlen( $number ) ) ); } public function testInvalid() { $this->assertFalse( wfBaseConvert( '101', 1, 15 ) ); $this->assertFalse( wfBaseConvert( '101', 15, 1 ) ); $this->assertFalse( wfBaseConvert( '101', 37, 15 ) ); $this->assertFalse( wfBaseConvert( '101', 15, 37 ) ); $this->assertFalse( wfBaseConvert( 'abcde', 10, 11 ) ); $this->assertFalse( wfBaseConvert( '12930', 2, 10 ) ); $this->assertFalse( wfBaseConvert( '101', 'abc', 15 ) ); $this->assertFalse( wfBaseConvert( '101', 15, 'abc' ) ); } public function testPadding() { $number = "10101010101"; $this->assertSame( strlen( $number ) + 5, strlen( wfBaseConvert( $number, 2, 2, strlen( $number ) + 5 ) ) ); $this->assertSame( strlen( $number ), strlen( wfBaseConvert( $number, 2, 2, strlen( $number ) - 5 ) ) ); } public function testLeadingZero() { $this->assertSame( '24', wfBaseConvert( '010', 36, 16 ) ); $this->assertSame( '37d4', wfBaseConvert( '0b10', 36, 16 ) ); $this->assertSame( 'a734', wfBaseConvert( '0x10', 36, 16 ) ); } }