[ticket/10042] Add mt_rand() wrapper which allows swapping $min and $max.

PHPBB3-10042
This commit is contained in:
Andreas Fischer 2011-03-05 22:16:50 +01:00
parent afae883619
commit 5ab4dc2983
2 changed files with 62 additions and 0 deletions

View file

@ -244,6 +244,22 @@ function unique_id($extra = 'c')
return substr($val, 4, 16);
}
/**
* Wrapper for mt_rand() which allows swapping $min and $max parameters.
*
* PHP does not allow us to swap the order of the arguments for mt_rand() anymore.
* (since PHP 5.3.4, see http://bugs.php.net/46587)
*
* @param int $min Lowest value to be returned
* @param int $max Highest value to be returned
*
* @return int Random integer between $min and $max (or $max and $min)
*/
function phpbb_mt_rand($min, $max)
{
return ($min > $max) ? mt_rand($max, $min) : mt_rand($min, $max);
}
/**
* Return formatted string for filesizes
*

46
tests/random/mt_rand.php Normal file
View file

@ -0,0 +1,46 @@
<?php
/**
*
* @package testing
* @copyright (c) 2011 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
class phpbb_random_mt_rand_test extends phpbb_test_case
{
public function test_max_equals_min()
{
$result = phpbb_mt_rand(42, 42);
$this->assertEquals(42, $result);
}
public function test_max_equals_min_negative()
{
$result = phpbb_mt_rand(-42, -42);
$this->assertEquals(-42, $result);
}
public function test_max_greater_min()
{
$result = phpbb_mt_rand(3, 4);
$this->assertGreaterThanOrEqual(3, $result);
$this->assertLessThanOrEqual(4, $result);
}
public function test_min_greater_max()
{
$result = phpbb_mt_rand(4, 3);
$this->assertGreaterThanOrEqual(3, $result);
$this->assertLessThanOrEqual(4, $result);
}
public function test_min_greater_max_negative()
{
$result = phpbb_mt_rand(-3, -4);
$this->assertGreaterThanOrEqual(-4, $result);
$this->assertLessThanOrEqual(-3, $result);
}
}