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.
|
* Helper class for large files on 32-bit platforms.
|
||||||
*/
|
*/
|
||||||
class LargeFileHelper {
|
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
|
* @brief Tries to get the filesize of a file via various workarounds that
|
||||||
* even work for large files on 32-bit platforms.
|
* 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