1--TEST--
2Test fscanf() function: usage variations - hexa formats with integer values
3--SKIPIF--
4<?php
5if (PHP_INT_SIZE != 4) {
6	die("skip this test is for 32bit platform only");
7}
8?>
9--FILE--
10<?php
11
12/*
13  Prototype: mixed fscanf ( resource $handle, string $format [, mixed &$...] );
14  Description: Parses input from a file according to a format
15*/
16
17/* Test fscanf() to scan different integer values using different hexa format types */
18
19$file_path = __DIR__;
20
21echo "*** Test fscanf(): different hexa format types with different integer values ***\n";
22
23// create a file
24$filename = "$file_path/fscanf_variation33.tmp";
25$file_handle = fopen($filename, "w");
26if($file_handle == false)
27  exit("Error:failed to open file $filename");
28
29// different valid  integer values
30$valid_ints = array(
31  0,
32  1,
33  -1,
34  -2147483648, // max negative integer value
35  -2147483647,
36  2147483647,  // max positive integer value
37  2147483640,
38  0x123B,      // integer as hexadecimal
39  0x12ab,
40  0Xfff,
41  0XFA,
42  -0x80000000, // max negative integer as hexadecimal
43  0x7fffffff,  // max positive integer as hexadecimal
44  0x7FFFFFFF,  // max positive integer as hexadecimal
45  0123,        // integer as octal
46  01,       // should be quivalent to octal 1
47  -020000000000, // max negative integer as octal
48  017777777777  // max positive integer as octal
49);
50// various hexa formats
51$hexa_formats = array(  "%x",
52			"%xx", "%lx", "%Lx",
53			" %x", "%x ", "% x",
54		        "\t%x", "\n%x", "%4x",
55		        "%30x", "%[0-9A-Fa-f]", "%*x"
56		);
57
58$counter = 1;
59
60// writing to the file
61foreach($valid_ints as $int_value) {
62  @fprintf($file_handle, $int_value);
63  @fprintf($file_handle, "\n");
64}
65// closing the file
66fclose($file_handle);
67
68// opening the file for reading
69$file_handle = fopen($filename, "r");
70if($file_handle == false) {
71  exit("Error:failed to open file $filename");
72}
73
74$counter = 1;
75// reading the values from file using different hexa formats
76foreach($hexa_formats as $hexa_format) {
77  // rewind the file so that for every foreach iteration the file pointer starts from bof
78  rewind($file_handle);
79  echo "\n-- iteration $counter --\n";
80  while( !feof($file_handle) ) {
81    var_dump( fscanf($file_handle,$hexa_format) );
82  }
83  $counter++;
84}
85
86echo "\n*** Done ***";
87?>
88--CLEAN--
89<?php
90$file_path = __DIR__;
91$filename = "$file_path/fscanf_variation33.tmp";
92unlink($filename);
93?>
94--EXPECTF--
95*** Test fscanf(): different hexa format types with different integer values ***
96
97-- iteration 1 --
98array(1) {
99  [0]=>
100  int(0)
101}
102array(1) {
103  [0]=>
104  int(1)
105}
106array(1) {
107  [0]=>
108  int(-1)
109}
110array(1) {
111  [0]=>
112  int(-2147483648)
113}
114array(1) {
115  [0]=>
116  int(-2147483648)
117}
118array(1) {
119  [0]=>
120  int(2147483647)
121}
122array(1) {
123  [0]=>
124  int(2147483647)
125}
126array(1) {
127  [0]=>
128  int(18023)
129}
130array(1) {
131  [0]=>
132  int(18297)
133}
134array(1) {
135  [0]=>
136  int(16533)
137}
138array(1) {
139  [0]=>
140  int(592)
141}
142array(1) {
143  [0]=>
144  int(-2147483648)
145}
146array(1) {
147  [0]=>
148  int(2147483647)
149}
150array(1) {
151  [0]=>
152  int(2147483647)
153}
154array(1) {
155  [0]=>
156  int(131)
157}
158array(1) {
159  [0]=>
160  int(1)
161}
162array(1) {
163  [0]=>
164  int(-2147483648)
165}
166array(1) {
167  [0]=>
168  int(2147483647)
169}
170bool(false)
171
172-- iteration 2 --
173array(1) {
174  [0]=>
175  int(0)
176}
177array(1) {
178  [0]=>
179  int(1)
180}
181array(1) {
182  [0]=>
183  int(-1)
184}
185array(1) {
186  [0]=>
187  int(-2147483648)
188}
189array(1) {
190  [0]=>
191  int(-2147483648)
192}
193array(1) {
194  [0]=>
195  int(2147483647)
196}
197array(1) {
198  [0]=>
199  int(2147483647)
200}
201array(1) {
202  [0]=>
203  int(18023)
204}
205array(1) {
206  [0]=>
207  int(18297)
208}
209array(1) {
210  [0]=>
211  int(16533)
212}
213array(1) {
214  [0]=>
215  int(592)
216}
217array(1) {
218  [0]=>
219  int(-2147483648)
220}
221array(1) {
222  [0]=>
223  int(2147483647)
224}
225array(1) {
226  [0]=>
227  int(2147483647)
228}
229array(1) {
230  [0]=>
231  int(131)
232}
233array(1) {
234  [0]=>
235  int(1)
236}
237array(1) {
238  [0]=>
239  int(-2147483648)
240}
241array(1) {
242  [0]=>
243  int(2147483647)
244}
245bool(false)
246
247-- iteration 3 --
248array(1) {
249  [0]=>
250  int(0)
251}
252array(1) {
253  [0]=>
254  int(1)
255}
256array(1) {
257  [0]=>
258  int(-1)
259}
260array(1) {
261  [0]=>
262  int(-2147483648)
263}
264array(1) {
265  [0]=>
266  int(-2147483648)
267}
268array(1) {
269  [0]=>
270  int(2147483647)
271}
272array(1) {
273  [0]=>
274  int(2147483647)
275}
276array(1) {
277  [0]=>
278  int(18023)
279}
280array(1) {
281  [0]=>
282  int(18297)
283}
284array(1) {
285  [0]=>
286  int(16533)
287}
288array(1) {
289  [0]=>
290  int(592)
291}
292array(1) {
293  [0]=>
294  int(-2147483648)
295}
296array(1) {
297  [0]=>
298  int(2147483647)
299}
300array(1) {
301  [0]=>
302  int(2147483647)
303}
304array(1) {
305  [0]=>
306  int(131)
307}
308array(1) {
309  [0]=>
310  int(1)
311}
312array(1) {
313  [0]=>
314  int(-2147483648)
315}
316array(1) {
317  [0]=>
318  int(2147483647)
319}
320bool(false)
321
322-- iteration 4 --
323array(1) {
324  [0]=>
325  int(0)
326}
327array(1) {
328  [0]=>
329  int(1)
330}
331array(1) {
332  [0]=>
333  int(-1)
334}
335array(1) {
336  [0]=>
337  int(-2147483648)
338}
339array(1) {
340  [0]=>
341  int(-2147483648)
342}
343array(1) {
344  [0]=>
345  int(2147483647)
346}
347array(1) {
348  [0]=>
349  int(2147483647)
350}
351array(1) {
352  [0]=>
353  int(18023)
354}
355array(1) {
356  [0]=>
357  int(18297)
358}
359array(1) {
360  [0]=>
361  int(16533)
362}
363array(1) {
364  [0]=>
365  int(592)
366}
367array(1) {
368  [0]=>
369  int(-2147483648)
370}
371array(1) {
372  [0]=>
373  int(2147483647)
374}
375array(1) {
376  [0]=>
377  int(2147483647)
378}
379array(1) {
380  [0]=>
381  int(131)
382}
383array(1) {
384  [0]=>
385  int(1)
386}
387array(1) {
388  [0]=>
389  int(-2147483648)
390}
391array(1) {
392  [0]=>
393  int(2147483647)
394}
395bool(false)
396
397-- iteration 5 --
398array(1) {
399  [0]=>
400  int(0)
401}
402array(1) {
403  [0]=>
404  int(1)
405}
406array(1) {
407  [0]=>
408  int(-1)
409}
410array(1) {
411  [0]=>
412  int(-2147483648)
413}
414array(1) {
415  [0]=>
416  int(-2147483648)
417}
418array(1) {
419  [0]=>
420  int(2147483647)
421}
422array(1) {
423  [0]=>
424  int(2147483647)
425}
426array(1) {
427  [0]=>
428  int(18023)
429}
430array(1) {
431  [0]=>
432  int(18297)
433}
434array(1) {
435  [0]=>
436  int(16533)
437}
438array(1) {
439  [0]=>
440  int(592)
441}
442array(1) {
443  [0]=>
444  int(-2147483648)
445}
446array(1) {
447  [0]=>
448  int(2147483647)
449}
450array(1) {
451  [0]=>
452  int(2147483647)
453}
454array(1) {
455  [0]=>
456  int(131)
457}
458array(1) {
459  [0]=>
460  int(1)
461}
462array(1) {
463  [0]=>
464  int(-2147483648)
465}
466array(1) {
467  [0]=>
468  int(2147483647)
469}
470bool(false)
471
472-- iteration 6 --
473array(1) {
474  [0]=>
475  int(0)
476}
477array(1) {
478  [0]=>
479  int(1)
480}
481array(1) {
482  [0]=>
483  int(-1)
484}
485array(1) {
486  [0]=>
487  int(-2147483648)
488}
489array(1) {
490  [0]=>
491  int(-2147483648)
492}
493array(1) {
494  [0]=>
495  int(2147483647)
496}
497array(1) {
498  [0]=>
499  int(2147483647)
500}
501array(1) {
502  [0]=>
503  int(18023)
504}
505array(1) {
506  [0]=>
507  int(18297)
508}
509array(1) {
510  [0]=>
511  int(16533)
512}
513array(1) {
514  [0]=>
515  int(592)
516}
517array(1) {
518  [0]=>
519  int(-2147483648)
520}
521array(1) {
522  [0]=>
523  int(2147483647)
524}
525array(1) {
526  [0]=>
527  int(2147483647)
528}
529array(1) {
530  [0]=>
531  int(131)
532}
533array(1) {
534  [0]=>
535  int(1)
536}
537array(1) {
538  [0]=>
539  int(-2147483648)
540}
541array(1) {
542  [0]=>
543  int(2147483647)
544}
545bool(false)
546
547-- iteration 7 --
548
549Warning: fscanf(): Bad scan conversion character " " in %s on line %d
550NULL
551
552Warning: fscanf(): Bad scan conversion character " " in %s on line %d
553NULL
554
555Warning: fscanf(): Bad scan conversion character " " in %s on line %d
556NULL
557
558Warning: fscanf(): Bad scan conversion character " " in %s on line %d
559NULL
560
561Warning: fscanf(): Bad scan conversion character " " in %s on line %d
562NULL
563
564Warning: fscanf(): Bad scan conversion character " " in %s on line %d
565NULL
566
567Warning: fscanf(): Bad scan conversion character " " in %s on line %d
568NULL
569
570Warning: fscanf(): Bad scan conversion character " " in %s on line %d
571NULL
572
573Warning: fscanf(): Bad scan conversion character " " in %s on line %d
574NULL
575
576Warning: fscanf(): Bad scan conversion character " " in %s on line %d
577NULL
578
579Warning: fscanf(): Bad scan conversion character " " in %s on line %d
580NULL
581
582Warning: fscanf(): Bad scan conversion character " " in %s on line %d
583NULL
584
585Warning: fscanf(): Bad scan conversion character " " in %s on line %d
586NULL
587
588Warning: fscanf(): Bad scan conversion character " " in %s on line %d
589NULL
590
591Warning: fscanf(): Bad scan conversion character " " in %s on line %d
592NULL
593
594Warning: fscanf(): Bad scan conversion character " " in %s on line %d
595NULL
596
597Warning: fscanf(): Bad scan conversion character " " in %s on line %d
598NULL
599
600Warning: fscanf(): Bad scan conversion character " " in %s on line %d
601NULL
602bool(false)
603
604-- iteration 8 --
605array(1) {
606  [0]=>
607  int(0)
608}
609array(1) {
610  [0]=>
611  int(1)
612}
613array(1) {
614  [0]=>
615  int(-1)
616}
617array(1) {
618  [0]=>
619  int(-2147483648)
620}
621array(1) {
622  [0]=>
623  int(-2147483648)
624}
625array(1) {
626  [0]=>
627  int(2147483647)
628}
629array(1) {
630  [0]=>
631  int(2147483647)
632}
633array(1) {
634  [0]=>
635  int(18023)
636}
637array(1) {
638  [0]=>
639  int(18297)
640}
641array(1) {
642  [0]=>
643  int(16533)
644}
645array(1) {
646  [0]=>
647  int(592)
648}
649array(1) {
650  [0]=>
651  int(-2147483648)
652}
653array(1) {
654  [0]=>
655  int(2147483647)
656}
657array(1) {
658  [0]=>
659  int(2147483647)
660}
661array(1) {
662  [0]=>
663  int(131)
664}
665array(1) {
666  [0]=>
667  int(1)
668}
669array(1) {
670  [0]=>
671  int(-2147483648)
672}
673array(1) {
674  [0]=>
675  int(2147483647)
676}
677bool(false)
678
679-- iteration 9 --
680array(1) {
681  [0]=>
682  int(0)
683}
684array(1) {
685  [0]=>
686  int(1)
687}
688array(1) {
689  [0]=>
690  int(-1)
691}
692array(1) {
693  [0]=>
694  int(-2147483648)
695}
696array(1) {
697  [0]=>
698  int(-2147483648)
699}
700array(1) {
701  [0]=>
702  int(2147483647)
703}
704array(1) {
705  [0]=>
706  int(2147483647)
707}
708array(1) {
709  [0]=>
710  int(18023)
711}
712array(1) {
713  [0]=>
714  int(18297)
715}
716array(1) {
717  [0]=>
718  int(16533)
719}
720array(1) {
721  [0]=>
722  int(592)
723}
724array(1) {
725  [0]=>
726  int(-2147483648)
727}
728array(1) {
729  [0]=>
730  int(2147483647)
731}
732array(1) {
733  [0]=>
734  int(2147483647)
735}
736array(1) {
737  [0]=>
738  int(131)
739}
740array(1) {
741  [0]=>
742  int(1)
743}
744array(1) {
745  [0]=>
746  int(-2147483648)
747}
748array(1) {
749  [0]=>
750  int(2147483647)
751}
752bool(false)
753
754-- iteration 10 --
755array(1) {
756  [0]=>
757  int(0)
758}
759array(1) {
760  [0]=>
761  int(1)
762}
763array(1) {
764  [0]=>
765  int(-1)
766}
767array(1) {
768  [0]=>
769  int(-532)
770}
771array(1) {
772  [0]=>
773  int(-532)
774}
775array(1) {
776  [0]=>
777  int(8519)
778}
779array(1) {
780  [0]=>
781  int(8519)
782}
783array(1) {
784  [0]=>
785  int(18023)
786}
787array(1) {
788  [0]=>
789  int(18297)
790}
791array(1) {
792  [0]=>
793  int(16533)
794}
795array(1) {
796  [0]=>
797  int(592)
798}
799array(1) {
800  [0]=>
801  int(-532)
802}
803array(1) {
804  [0]=>
805  int(8519)
806}
807array(1) {
808  [0]=>
809  int(8519)
810}
811array(1) {
812  [0]=>
813  int(131)
814}
815array(1) {
816  [0]=>
817  int(1)
818}
819array(1) {
820  [0]=>
821  int(-532)
822}
823array(1) {
824  [0]=>
825  int(8519)
826}
827bool(false)
828
829-- iteration 11 --
830array(1) {
831  [0]=>
832  int(0)
833}
834array(1) {
835  [0]=>
836  int(1)
837}
838array(1) {
839  [0]=>
840  int(-1)
841}
842array(1) {
843  [0]=>
844  int(-2147483648)
845}
846array(1) {
847  [0]=>
848  int(-2147483648)
849}
850array(1) {
851  [0]=>
852  int(2147483647)
853}
854array(1) {
855  [0]=>
856  int(2147483647)
857}
858array(1) {
859  [0]=>
860  int(18023)
861}
862array(1) {
863  [0]=>
864  int(18297)
865}
866array(1) {
867  [0]=>
868  int(16533)
869}
870array(1) {
871  [0]=>
872  int(592)
873}
874array(1) {
875  [0]=>
876  int(-2147483648)
877}
878array(1) {
879  [0]=>
880  int(2147483647)
881}
882array(1) {
883  [0]=>
884  int(2147483647)
885}
886array(1) {
887  [0]=>
888  int(131)
889}
890array(1) {
891  [0]=>
892  int(1)
893}
894array(1) {
895  [0]=>
896  int(-2147483648)
897}
898array(1) {
899  [0]=>
900  int(2147483647)
901}
902bool(false)
903
904-- iteration 12 --
905array(1) {
906  [0]=>
907  string(1) "0"
908}
909array(1) {
910  [0]=>
911  string(1) "1"
912}
913array(1) {
914  [0]=>
915  NULL
916}
917array(1) {
918  [0]=>
919  NULL
920}
921array(1) {
922  [0]=>
923  NULL
924}
925array(1) {
926  [0]=>
927  string(10) "2147483647"
928}
929array(1) {
930  [0]=>
931  string(10) "2147483640"
932}
933array(1) {
934  [0]=>
935  string(4) "4667"
936}
937array(1) {
938  [0]=>
939  string(4) "4779"
940}
941array(1) {
942  [0]=>
943  string(4) "4095"
944}
945array(1) {
946  [0]=>
947  string(3) "250"
948}
949array(1) {
950  [0]=>
951  NULL
952}
953array(1) {
954  [0]=>
955  string(10) "2147483647"
956}
957array(1) {
958  [0]=>
959  string(10) "2147483647"
960}
961array(1) {
962  [0]=>
963  string(2) "83"
964}
965array(1) {
966  [0]=>
967  string(1) "1"
968}
969array(1) {
970  [0]=>
971  NULL
972}
973array(1) {
974  [0]=>
975  string(10) "2147483647"
976}
977bool(false)
978
979-- iteration 13 --
980array(0) {
981}
982array(0) {
983}
984array(0) {
985}
986array(0) {
987}
988array(0) {
989}
990array(0) {
991}
992array(0) {
993}
994array(0) {
995}
996array(0) {
997}
998array(0) {
999}
1000array(0) {
1001}
1002array(0) {
1003}
1004array(0) {
1005}
1006array(0) {
1007}
1008array(0) {
1009}
1010array(0) {
1011}
1012array(0) {
1013}
1014array(0) {
1015}
1016bool(false)
1017
1018*** Done ***
1019