1--TEST--
2Test strspn() function : usage variations - with heredoc strings, varying start and default len args
3--FILE--
4<?php
5/* Prototype  : proto int strspn(string str, string mask [, int start [, int len]])
6 * Description: Finds length of initial segment consisting entirely of characters found in mask.
7                If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)
8 * Source code: ext/standard/string.c
9 * Alias to functions: none
10*/
11
12/*
13* Testing strspn() : with heredoc string, varying start and default len arguments
14*/
15
16echo "*** Testing strspn() : with different start values ***\n";
17
18// initialing required variables
19// defining different heredoc strings
20$empty_heredoc = <<<EOT
21EOT;
22
23$heredoc_with_newline = <<<EOT
24\n
25
26EOT;
27
28$heredoc_with_characters = <<<EOT
29first line of heredoc string
30second line of heredoc string
31third line of heredocstring
32EOT;
33
34$heredoc_with_newline_and_tabs = <<<EOT
35hello\tworld\nhello\nworld\n
36EOT;
37
38$heredoc_with_alphanumerics = <<<EOT
39hello123world456
401234hello\t1234
41EOT;
42
43$heredoc_with_embedded_nulls = <<<EOT
44hello\0world\0hello
45\0hello\0
46EOT;
47
48$heredoc_with_hexa_octal = <<<EOT
49hello\0\100\xaaworld\0hello
50\0hello\0
51EOT;
52
53// defining array of different heredoc strings
54$heredoc_strings = array(
55                   $empty_heredoc,
56                   $heredoc_with_newline,
57                   $heredoc_with_characters,
58                   $heredoc_with_newline_and_tabs,
59                   $heredoc_with_alphanumerics,
60                   $heredoc_with_embedded_nulls,
61                   $heredoc_with_hexa_octal
62                   );
63
64// defining array of different mask strings
65$mask_array = array(
66		    "",
67		    '',
68		    "f\nh\trstie \l",
69		    'f\n\thrstei \l',
70		    "\t",
71		    "t\ e",
72		    '\t',
73		    "f\te\h ",
74		    " \t",
75                    "f\t\ih\100e\xa"
76                   );
77
78// defining array of different start values
79$start_array = array(
80		    0,
81		    1,
82  	            2,
83		    -1,
84		    -2,
85		    2147483647,  // max positive integer
86		    -2147483648,  // min negative integer
87                   );
88
89
90// loop through each element of the array for heredoc strings, mask strings and start values
91
92$count = 1;
93
94foreach($heredoc_strings as $str)  {
95  echo "\n-- Iteration $count --\n";
96  foreach($mask_array as $mask)  {
97    foreach($start_array as $start)  {
98      var_dump( strspn($str,$mask,$start) );  // with default len value
99    }
100  }
101  $count++;
102}
103
104echo "Done"
105?>
106--EXPECTF--
107*** Testing strspn() : with different start values ***
108
109-- Iteration 1 --
110int(0)
111bool(false)
112bool(false)
113int(0)
114int(0)
115bool(false)
116int(0)
117int(0)
118bool(false)
119bool(false)
120int(0)
121int(0)
122bool(false)
123int(0)
124int(0)
125bool(false)
126bool(false)
127int(0)
128int(0)
129bool(false)
130int(0)
131int(0)
132bool(false)
133bool(false)
134int(0)
135int(0)
136bool(false)
137int(0)
138int(0)
139bool(false)
140bool(false)
141int(0)
142int(0)
143bool(false)
144int(0)
145int(0)
146bool(false)
147bool(false)
148int(0)
149int(0)
150bool(false)
151int(0)
152int(0)
153bool(false)
154bool(false)
155int(0)
156int(0)
157bool(false)
158int(0)
159int(0)
160bool(false)
161bool(false)
162int(0)
163int(0)
164bool(false)
165int(0)
166int(0)
167bool(false)
168bool(false)
169int(0)
170int(0)
171bool(false)
172int(0)
173int(0)
174bool(false)
175bool(false)
176int(0)
177int(0)
178bool(false)
179int(0)
180
181-- Iteration 2 --
182int(0)
183int(0)
184int(0)
185int(0)
186int(0)
187bool(false)
188int(0)
189int(0)
190int(0)
191int(0)
192int(0)
193int(0)
194bool(false)
195int(0)
196int(2)
197int(1)
198int(0)
199int(1)
200int(2)
201bool(false)
202int(2)
203int(0)
204int(0)
205int(0)
206int(0)
207int(0)
208bool(false)
209int(0)
210int(0)
211int(0)
212int(0)
213int(0)
214int(0)
215bool(false)
216int(0)
217int(0)
218int(0)
219int(0)
220int(0)
221int(0)
222bool(false)
223int(0)
224int(0)
225int(0)
226int(0)
227int(0)
228int(0)
229bool(false)
230int(0)
231int(0)
232int(0)
233int(0)
234int(0)
235int(0)
236bool(false)
237int(0)
238int(0)
239int(0)
240int(0)
241int(0)
242int(0)
243bool(false)
244int(0)
245int(2)
246int(1)
247int(0)
248int(1)
249int(2)
250bool(false)
251int(2)
252
253-- Iteration 3 --
254int(0)
255int(0)
256int(0)
257int(0)
258int(0)
259bool(false)
260int(0)
261int(0)
262int(0)
263int(0)
264int(0)
265int(0)
266bool(false)
267int(0)
268int(8)
269int(7)
270int(6)
271int(0)
272int(0)
273bool(false)
274int(8)
275int(11)
276int(10)
277int(9)
278int(0)
279int(1)
280bool(false)
281int(11)
282int(0)
283int(0)
284int(0)
285int(0)
286int(0)
287bool(false)
288int(0)
289int(0)
290int(0)
291int(0)
292int(0)
293int(0)
294bool(false)
295int(0)
296int(0)
297int(0)
298int(0)
299int(0)
300int(0)
301bool(false)
302int(0)
303int(1)
304int(0)
305int(0)
306int(0)
307int(0)
308bool(false)
309int(1)
310int(0)
311int(0)
312int(0)
313int(0)
314int(0)
315bool(false)
316int(0)
317int(2)
318int(1)
319int(0)
320int(0)
321int(0)
322bool(false)
323int(2)
324
325-- Iteration 4 --
326int(0)
327int(0)
328int(0)
329int(0)
330int(0)
331bool(false)
332int(0)
333int(0)
334int(0)
335int(0)
336int(0)
337int(0)
338bool(false)
339int(0)
340int(4)
341int(3)
342int(2)
343int(1)
344int(0)
345bool(false)
346int(4)
347int(4)
348int(3)
349int(2)
350int(0)
351int(0)
352bool(false)
353int(4)
354int(0)
355int(0)
356int(0)
357int(0)
358int(0)
359bool(false)
360int(0)
361int(0)
362int(1)
363int(0)
364int(0)
365int(0)
366bool(false)
367int(0)
368int(0)
369int(0)
370int(0)
371int(0)
372int(0)
373bool(false)
374int(0)
375int(2)
376int(1)
377int(0)
378int(0)
379int(0)
380bool(false)
381int(2)
382int(0)
383int(0)
384int(0)
385int(0)
386int(0)
387bool(false)
388int(0)
389int(2)
390int(1)
391int(0)
392int(1)
393int(0)
394bool(false)
395int(2)
396
397-- Iteration 5 --
398int(0)
399int(0)
400int(0)
401int(0)
402int(0)
403bool(false)
404int(0)
405int(0)
406int(0)
407int(0)
408int(0)
409int(0)
410bool(false)
411int(0)
412int(4)
413int(3)
414int(2)
415int(0)
416int(0)
417bool(false)
418int(4)
419int(4)
420int(3)
421int(2)
422int(0)
423int(0)
424bool(false)
425int(4)
426int(0)
427int(0)
428int(0)
429int(0)
430int(0)
431bool(false)
432int(0)
433int(0)
434int(1)
435int(0)
436int(0)
437int(0)
438bool(false)
439int(0)
440int(0)
441int(0)
442int(0)
443int(0)
444int(0)
445bool(false)
446int(0)
447int(2)
448int(1)
449int(0)
450int(0)
451int(0)
452bool(false)
453int(2)
454int(0)
455int(0)
456int(0)
457int(0)
458int(0)
459bool(false)
460int(0)
461int(2)
462int(1)
463int(0)
464int(0)
465int(0)
466bool(false)
467int(2)
468
469-- Iteration 6 --
470int(0)
471int(0)
472int(0)
473int(0)
474int(0)
475bool(false)
476int(0)
477int(0)
478int(0)
479int(0)
480int(0)
481int(0)
482bool(false)
483int(0)
484int(4)
485int(3)
486int(2)
487int(0)
488int(0)
489bool(false)
490int(4)
491int(4)
492int(3)
493int(2)
494int(0)
495int(0)
496bool(false)
497int(4)
498int(0)
499int(0)
500int(0)
501int(0)
502int(0)
503bool(false)
504int(0)
505int(0)
506int(1)
507int(0)
508int(0)
509int(0)
510bool(false)
511int(0)
512int(0)
513int(0)
514int(0)
515int(0)
516int(0)
517bool(false)
518int(0)
519int(2)
520int(1)
521int(0)
522int(0)
523int(0)
524bool(false)
525int(2)
526int(0)
527int(0)
528int(0)
529int(0)
530int(0)
531bool(false)
532int(0)
533int(2)
534int(1)
535int(0)
536int(0)
537int(0)
538bool(false)
539int(2)
540
541-- Iteration 7 --
542int(0)
543int(0)
544int(0)
545int(0)
546int(0)
547bool(false)
548int(0)
549int(0)
550int(0)
551int(0)
552int(0)
553int(0)
554bool(false)
555int(0)
556int(4)
557int(3)
558int(2)
559int(0)
560int(0)
561bool(false)
562int(4)
563int(4)
564int(3)
565int(2)
566int(0)
567int(0)
568bool(false)
569int(4)
570int(0)
571int(0)
572int(0)
573int(0)
574int(0)
575bool(false)
576int(0)
577int(0)
578int(1)
579int(0)
580int(0)
581int(0)
582bool(false)
583int(0)
584int(0)
585int(0)
586int(0)
587int(0)
588int(0)
589bool(false)
590int(0)
591int(2)
592int(1)
593int(0)
594int(0)
595int(0)
596bool(false)
597int(2)
598int(0)
599int(0)
600int(0)
601int(0)
602int(0)
603bool(false)
604int(0)
605int(2)
606int(1)
607int(0)
608int(0)
609int(0)
610bool(false)
611int(2)
612Done