1--TEST--
2Test mt_rand() function : usage variations - different data types as $max argument
3--SKIPIF--
4<?php if (PHP_INT_SIZE !== 4) die("skip this test is for 32-bit only");
5--FILE--
6<?php
7/* Prototype  : int mt_rand  ([ int $min  , int $max ] )
8 * Description: Generate a better random value.
9 * Source code: ext/standard/rand.c
10 */
11
12echo "*** Testing mt_rand) : usage variations ***\n";
13
14//get an unset variable
15$unset_var = 10;
16unset ($unset_var);
17
18// heredoc string
19$heredoc = <<<EOT
20abc
21xyz
22EOT;
23
24// get a class
25class classA
26{
27}
28
29// get a resource variable
30$fp = fopen(__FILE__, "r");
31
32$inputs = array(
33       // int data
34/*1*/  0,
35       1,
36       12345,
37       -2345,
38       2147483647,
39
40       // float data
41/*6*/  10.5,
42       -10.5,
43       12.3456789000e10,
44       12.3456789000E-10,
45       .5,
46
47       // null data
48/*11*/ NULL,
49       null,
50
51       // boolean data
52/*13*/ true,
53       false,
54       TRUE,
55       FALSE,
56
57       // empty data
58/*17*/ "",
59       '',
60       array(),
61
62       // string data
63/*20*/ "abcxyz",
64       'abcxyz',
65       $heredoc,
66
67       // object data
68/*23*/ new classA(),
69
70       // undefined data
71/*24*/ @$undefined_var,
72
73       // unset data
74/*25*/ @$unset_var,
75
76       // resource variable
77/*26*/ $fp
78);
79
80// loop through each element of $inputs to check the behaviour of mt_rand()
81$iterator = 1;
82foreach($inputs as $input) {
83	echo "\n-- Iteration $iterator --\n";
84	var_dump(mt_rand(-1 * mt_getrandmax(), $input));
85	$iterator++;
86};
87fclose($fp);
88?>
89===Done===
90--EXPECTF--
91*** Testing mt_rand) : usage variations ***
92
93-- Iteration 1 --
94int(%i)
95
96-- Iteration 2 --
97int(%i)
98
99-- Iteration 3 --
100int(%i)
101
102-- Iteration 4 --
103int(%i)
104
105-- Iteration 5 --
106int(%i)
107
108-- Iteration 6 --
109int(%i)
110
111-- Iteration 7 --
112int(%i)
113
114-- Iteration 8 --
115
116Warning: mt_rand() expects parameter 2 to be integer, float given in %s on line %d
117NULL
118
119-- Iteration 9 --
120int(%i)
121
122-- Iteration 10 --
123int(%i)
124
125-- Iteration 11 --
126int(%i)
127
128-- Iteration 12 --
129int(%i)
130
131-- Iteration 13 --
132int(%i)
133
134-- Iteration 14 --
135int(%i)
136
137-- Iteration 15 --
138int(%i)
139
140-- Iteration 16 --
141int(%i)
142
143-- Iteration 17 --
144
145Warning: mt_rand() expects parameter 2 to be integer, string given in %s on line %d
146NULL
147
148-- Iteration 18 --
149
150Warning: mt_rand() expects parameter 2 to be integer, string given in %s on line %d
151NULL
152
153-- Iteration 19 --
154
155Warning: mt_rand() expects parameter 2 to be integer, array given in %s on line %d
156NULL
157
158-- Iteration 20 --
159
160Warning: mt_rand() expects parameter 2 to be integer, string given in %s on line %d
161NULL
162
163-- Iteration 21 --
164
165Warning: mt_rand() expects parameter 2 to be integer, string given in %s on line %d
166NULL
167
168-- Iteration 22 --
169
170Warning: mt_rand() expects parameter 2 to be integer, string given in %s on line %d
171NULL
172
173-- Iteration 23 --
174
175Warning: mt_rand() expects parameter 2 to be integer, object given in %s on line %d
176NULL
177
178-- Iteration 24 --
179int(%i)
180
181-- Iteration 25 --
182int(%i)
183
184-- Iteration 26 --
185
186Warning: mt_rand() expects parameter 2 to be integer, resource given in %s on line %d
187NULL
188===Done===
189