1--TEST--
2Test mt_rand() - basic function test mt_rand()
3--FILE--
4<?php
5$default_max = mt_getrandmax();
6
7echo "\nmt_rand() tests with default min and max value (i.e 0 thru ", $default_max, ")\n";
8for ($i = 0; $i < 100; $i++) {
9	$res = mt_rand();
10
11// By default RAND_MAX is 32768 although no constant is defined for it for user space apps
12	if (!is_int($res) || $res < 0 || $res > $default_max) {
13		break;
14	}
15}
16
17if ($i != 100) {
18	echo "FAILED: res = ",  $res, " min = 0 max = ", $default_max, "\n";
19} else {
20	echo "PASSED: range min = 0  max = ", $default_max, "\n";
21}
22
23echo "\nmt_rand() tests with defined min and max value\n";
24
25$min = array(10,
26			 100,
27			 10.5,
28			 10.5e3,
29			 0x10,
30			 0400);
31
32$max = array(100,
33			 1000,
34			 19.5,
35			 10.5e5,
36			 0x10000,
37			 0700);
38
39for ($x = 0; $x < count($min); $x++) {
40	for ($i = 0; $i < 100; $i++) {
41		$res = mt_rand($min[$x], $max[$x]);
42
43		if (!is_int($res) || $res < intval($min[$x]) || $res > intval($max[$x])) {
44			echo "FAILED: res = ",  $res, " min = ", intval($min[$x]), " max = ", intval($max[$x]), "\n";
45			break;
46		}
47	}
48
49	if ($i == 100) {
50		echo "PASSED: range min = ", intval($min[$x]), " max = ", intval($max[$x]), "\n";
51	}
52}
53
54echo "\nNon-numeric cases\n";
55$min = array(true,
56			 false,
57			 null,
58			 "10",
59			 "0x10",
60			 "10.5");
61
62// Eexepcted numerical equivalent of above non-numerics
63$minval = array(1,
64				0,
65				0,
66				10,
67				0,
68				10);
69for ($x = 0; $x < count($min); $x++) {
70	for ($i = 0; $i < 100; $i++) {
71		$res = mt_rand($min[$x], 100);
72
73		if (!is_int($res) || $res < intval($minval[$x]) || $res > 100) {
74			echo "FAILED: res = ",  $res, " min = ", intval($min[$x]), " max = ", intval($max[$x]), "\n";
75			break;
76		}
77	}
78
79	if ($i == 100) {
80		echo "PASSED range min = ", intval($min[$x]), " max = 100\n";
81	}
82}
83?>
84--EXPECTF--
85mt_rand() tests with default min and max value (i.e 0 thru 2147483647)
86PASSED: range min = 0  max = 2147483647
87
88mt_rand() tests with defined min and max value
89PASSED: range min = 10 max = 100
90PASSED: range min = 100 max = 1000
91PASSED: range min = 10 max = 19
92PASSED: range min = 10500 max = 1050000
93PASSED: range min = 16 max = 65536
94PASSED: range min = 256 max = 448
95
96Non-numeric cases
97PASSED range min = 1 max = 100
98PASSED range min = 0 max = 100
99PASSED range min = 0 max = 100
100PASSED range min = 10 max = 100
101PASSED range min = 0 max = 100
102PASSED range min = 10 max = 100
103