aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2011-03-05 22:16:50 +0100
committerAndreas Fischer <bantu@phpbb.com>2011-03-05 22:16:50 +0100
commit5ab4dc298327d3a8d51387959d6905c6bb24fd99 (patch)
tree6b560d2512e5fbe20d1d9db5203045d276c874f1
parentafae883619eb7d193b413b5599078a6f47ead408 (diff)
downloadforums-5ab4dc298327d3a8d51387959d6905c6bb24fd99.tar
forums-5ab4dc298327d3a8d51387959d6905c6bb24fd99.tar.gz
forums-5ab4dc298327d3a8d51387959d6905c6bb24fd99.tar.bz2
forums-5ab4dc298327d3a8d51387959d6905c6bb24fd99.tar.xz
forums-5ab4dc298327d3a8d51387959d6905c6bb24fd99.zip
[ticket/10042] Add mt_rand() wrapper which allows swapping $min and $max.
PHPBB3-10042
-rw-r--r--phpBB/includes/functions.php16
-rw-r--r--tests/random/mt_rand.php46
2 files changed, 62 insertions, 0 deletions
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index 398a02380b..259b3b0481 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -245,6 +245,22 @@ function unique_id($extra = 'c')
}
/**
+* 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
*
* @param int $value filesize in bytes
diff --git a/tests/random/mt_rand.php b/tests/random/mt_rand.php
new file mode 100644
index 0000000000..d6502c4e80
--- /dev/null
+++ b/tests/random/mt_rand.php
@@ -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);
+ }
+}