Add helper method for turning int|float into base-10 unsigned integer string.
This commit is contained in:
parent
82e17155bf
commit
2c36a4b07a
|
@ -12,6 +12,30 @@ namespace OC;
|
|||
* Helper class for large files on 32-bit platforms.
|
||||
*/
|
||||
class LargeFileHelper {
|
||||
/**
|
||||
* @brief Formats a signed integer or float as an unsigned integer base-10
|
||||
* string. Passed strings will be checked for being base-10.
|
||||
*
|
||||
* @param int|float|string $number Number containing unsigned integer data
|
||||
*
|
||||
* @return string Unsigned integer base-10 string
|
||||
*/
|
||||
public function formatUnsignedInteger($number) {
|
||||
if (is_float($number)) {
|
||||
// Undo the effect of the php.ini setting 'precision'.
|
||||
return number_format($number, 0, '', '');
|
||||
} else if (is_string($number) && ctype_digit($number)) {
|
||||
return $number;
|
||||
} else if (is_int($number)) {
|
||||
// Interpret signed integer as unsigned integer.
|
||||
return sprintf('%u', $number);
|
||||
} else {
|
||||
throw new \UnexpectedValueException(
|
||||
'Expected int, float or base-10 string'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Tries to get the filesize of a file via various workarounds that
|
||||
* even work for large files on 32-bit platforms.
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2014 Andreas Fischer <bantu@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace Test;
|
||||
|
||||
class LargeFileHelper extends \PHPUnit_Framework_TestCase {
|
||||
protected $helper;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
$this->helper = new \OC\LargeFileHelper;
|
||||
}
|
||||
|
||||
public function testFormatUnsignedIntegerFloat() {
|
||||
$this->assertSame(
|
||||
'9007199254740992',
|
||||
$this->helper->formatUnsignedInteger((float) 9007199254740992)
|
||||
);
|
||||
}
|
||||
|
||||
public function testFormatUnsignedIntegerInt() {
|
||||
$this->assertSame(
|
||||
PHP_INT_SIZE === 4 ? '4294967295' : '18446744073709551615',
|
||||
$this->helper->formatUnsignedInteger(-1)
|
||||
);
|
||||
}
|
||||
|
||||
public function testFormatUnsignedIntegerString() {
|
||||
$this->assertSame(
|
||||
'9007199254740993',
|
||||
$this->helper->formatUnsignedInteger('9007199254740993')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \UnexpectedValueException
|
||||
*/
|
||||
public function testFormatUnsignedIntegerStringException() {
|
||||
$this->helper->formatUnsignedInteger('900ABCD254740993');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue