1--TEST--
2Test array_slice() function : usage variations - Pass different data types as $length arg
3--SKIPIF--
4<?php if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); ?>
5--FILE--
6<?php
7/* Prototype  : array array_slice(array $input, int $offset [, int $length [, bool $preserve_keys]])
8 * Description: Returns elements specified by offset and length
9 * Source code: ext/standard/array.c
10 */
11
12/*
13 * Pass different data types as $length argument to array_slice to test behaviour
14 */
15
16echo "*** Testing array_slice() : usage variations ***\n";
17
18// Initialise function arguments not being substituted
19$input_array = array('one' => 1, 2, 'three' => 3, 4);
20$offset = 2;
21
22//get an unset variable
23$unset_var = 10;
24unset ($unset_var);
25
26// heredoc string
27$heredoc = <<<EOT
28hello world
29EOT;
30
31// unexpected values to be passed to $length argument
32$inputs = array(
33
34       // int data
35/*1*/  0,
36       1,
37       12345,
38       -2345,
39
40       // float data
41/*5*/  10.5,
42       -10.5,
43       12.3456789000e10,
44       12.3456789000E-10,
45       .5,
46
47       // null data
48/*10*/ NULL,
49       null,
50
51       // boolean data
52/*12*/ true,
53       false,
54       TRUE,
55       FALSE,
56
57       // empty data
58/*16*/ "",
59       '',
60       array(),
61
62       // string data
63/*19*/ "string",
64       'string',
65       $heredoc,
66
67       // undefined data
68/*22*/ @$undefined_var,
69
70       // unset data
71/*23*/ @$unset_var,
72);
73
74// loop through each element of $inputs to check the behavior of array_slice
75$iterator = 1;
76foreach($inputs as $input) {
77  echo "\n-- Iteration $iterator --\n";
78  var_dump( array_slice($input_array, $offset, $input) );
79  $iterator++;
80};
81
82echo "Done";
83?>
84
85--EXPECTF--
86*** Testing array_slice() : usage variations ***
87
88-- Iteration 1 --
89array(0) {
90}
91
92-- Iteration 2 --
93array(1) {
94  ["three"]=>
95  int(3)
96}
97
98-- Iteration 3 --
99array(2) {
100  ["three"]=>
101  int(3)
102  [0]=>
103  int(4)
104}
105
106-- Iteration 4 --
107array(0) {
108}
109
110-- Iteration 5 --
111array(2) {
112  ["three"]=>
113  int(3)
114  [0]=>
115  int(4)
116}
117
118-- Iteration 6 --
119array(0) {
120}
121
122-- Iteration 7 --
123array(2) {
124  ["three"]=>
125  int(3)
126  [0]=>
127  int(4)
128}
129
130-- Iteration 8 --
131array(0) {
132}
133
134-- Iteration 9 --
135array(0) {
136}
137
138-- Iteration 10 --
139array(2) {
140  ["three"]=>
141  int(3)
142  [0]=>
143  int(4)
144}
145
146-- Iteration 11 --
147array(2) {
148  ["three"]=>
149  int(3)
150  [0]=>
151  int(4)
152}
153
154-- Iteration 12 --
155array(1) {
156  ["three"]=>
157  int(3)
158}
159
160-- Iteration 13 --
161array(0) {
162}
163
164-- Iteration 14 --
165array(1) {
166  ["three"]=>
167  int(3)
168}
169
170-- Iteration 15 --
171array(0) {
172}
173
174-- Iteration 16 --
175array(0) {
176}
177
178-- Iteration 17 --
179array(0) {
180}
181
182-- Iteration 18 --
183array(0) {
184}
185
186-- Iteration 19 --
187array(0) {
188}
189
190-- Iteration 20 --
191array(0) {
192}
193
194-- Iteration 21 --
195array(0) {
196}
197
198-- Iteration 22 --
199array(2) {
200  ["three"]=>
201  int(3)
202  [0]=>
203  int(4)
204}
205
206-- Iteration 23 --
207array(2) {
208  ["three"]=>
209  int(3)
210  [0]=>
211  int(4)
212}
213Done