1--TEST--
2Test gettype() & settype() functions : usage variations
3--SKIPIF--
4<?php
5if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
6?>
7--FILE--
8<?php
9/* Test usage variation of gettype() and settype() functions:
10         settype() to float/double type.
11   Set type of the data to "float"/"double" and verify using gettype
12   Following are performed in the listed sequence:
13     get the current type of the variable
14     set the type of the variable to float/double type
15     dump the variable to see its new data
16     get the new type of the variable
17*/
18
19/* function to handle catchable errors */
20function foo($errno, $errstr, $errfile, $errline) {
21//	var_dump($errstr);
22   // print error no and error string
23   echo "$errno: $errstr\n";
24}
25//set the error handler, this is required as
26// settype() would fail with catachable fatal error
27set_error_handler("foo");
28
29$var1 = "another string";
30$var2 = array(2,3,4);
31
32class point
33{
34  var $x;
35  var $y;
36
37  function __construct($x, $y) {
38     $this->x = $x;
39     $this->y = $y;
40  }
41
42  function __toString() {
43     return "ObjectPoint";
44  }
45}
46
47$var_values = array (
48  /* nulls */
49  null,
50
51  /* boolean */
52  FALSE,
53  TRUE,
54  true,
55
56  /* strings */
57  "\xFF",
58  "\x66",
59  "\0123",
60  "",
61  '',
62  " ",
63  ' ',
64  /* numerics in the form of string */
65  '10',
66  "10",
67  "10string",
68  '10string',
69  "1",
70  "-1",
71  "1e2",
72  " 1",
73  "2974394749328742328432",
74  "-1e-2",
75  '1',
76  '-1',
77  '1e2',
78  ' 1',
79  '2974394749328742328432',
80  '-1e-2',
81  "0xff",
82  '0x55',
83  '0XA55',
84  '0X123',
85  "0123",
86  '0123',
87  "-0123",
88  "+0123",
89  '-0123',
90  '+0123',
91  "-0x80001", // invalid numerics as its prefix with sign or have decimal points
92  "+0x80001",
93  "-0x80001.5",
94  "0x80001.5",
95  "@$%#$%^$%^&^",
96
97  /* arrays */
98  array(),
99  array(NULL),
100  array(1,2,3,4),
101  array(1 => "one", 2 => "two", "3" => "three", "four" => 4),
102  array(1.5, 2.4, 6.5e6),
103
104  /* integers */
105  -2147483648, // max -ne int value
106  2147483647,
107  2147483649,
108  1232147483649,
109  0x55,
110  0xF674593039, // a hex value > than max int
111  -0X558F,
112  0555,
113  -0555,
114  02224242434343152, // an octal value > than max int
115
116  /* floats */
117  1e5,
118  -1e5,
119  1E5,
120  -1E5,
121  -1.5,
122  .5,
123  -.5,
124  .5e6,
125  -.5e6,
126  -.5e-6,
127  .5e+6,
128  -.5e+6,
129  .512E6,
130  -.512E6,
131  .512E-6,
132  +.512E-6,
133  .512E+6,
134  -.512E+6,
135
136  new point(NULL, NULL),
137  new point(2.5, 40.5),
138  new point(0, 0),
139);
140
141// test conversion to these types
142$types = array(
143  "float",
144  "double"
145);
146
147echo "\n*** Testing settype() & gettype() : usage variations ***\n";
148foreach ($types as $type) {
149  echo "\n-- Setting type of data to $type --\n";
150  $inner_loop_count = 1;
151  foreach ($var_values as $var) {
152    echo "-- Iteration $inner_loop_count --\n"; $inner_loop_count++;
153
154    // get the current data type
155    var_dump( gettype($var) );
156
157    // convert it to new type
158    var_dump( settype($var, $type) );
159
160    // dump the converted $var
161    var_dump( $var );
162
163    // get the new type of the $var
164    var_dump( gettype($var) );
165  }
166}
167
168echo "Done\n";
169?>
170--EXPECT--
171*** Testing settype() & gettype() : usage variations ***
172
173-- Setting type of data to float --
174-- Iteration 1 --
175string(4) "NULL"
176bool(true)
177float(0)
178string(6) "double"
179-- Iteration 2 --
180string(7) "boolean"
181bool(true)
182float(0)
183string(6) "double"
184-- Iteration 3 --
185string(7) "boolean"
186bool(true)
187float(1)
188string(6) "double"
189-- Iteration 4 --
190string(7) "boolean"
191bool(true)
192float(1)
193string(6) "double"
194-- Iteration 5 --
195string(6) "string"
196bool(true)
197float(0)
198string(6) "double"
199-- Iteration 6 --
200string(6) "string"
201bool(true)
202float(0)
203string(6) "double"
204-- Iteration 7 --
205string(6) "string"
206bool(true)
207float(3)
208string(6) "double"
209-- Iteration 8 --
210string(6) "string"
211bool(true)
212float(0)
213string(6) "double"
214-- Iteration 9 --
215string(6) "string"
216bool(true)
217float(0)
218string(6) "double"
219-- Iteration 10 --
220string(6) "string"
221bool(true)
222float(0)
223string(6) "double"
224-- Iteration 11 --
225string(6) "string"
226bool(true)
227float(0)
228string(6) "double"
229-- Iteration 12 --
230string(6) "string"
231bool(true)
232float(10)
233string(6) "double"
234-- Iteration 13 --
235string(6) "string"
236bool(true)
237float(10)
238string(6) "double"
239-- Iteration 14 --
240string(6) "string"
241bool(true)
242float(10)
243string(6) "double"
244-- Iteration 15 --
245string(6) "string"
246bool(true)
247float(10)
248string(6) "double"
249-- Iteration 16 --
250string(6) "string"
251bool(true)
252float(1)
253string(6) "double"
254-- Iteration 17 --
255string(6) "string"
256bool(true)
257float(-1)
258string(6) "double"
259-- Iteration 18 --
260string(6) "string"
261bool(true)
262float(100)
263string(6) "double"
264-- Iteration 19 --
265string(6) "string"
266bool(true)
267float(1)
268string(6) "double"
269-- Iteration 20 --
270string(6) "string"
271bool(true)
272float(2.974394749328742E+21)
273string(6) "double"
274-- Iteration 21 --
275string(6) "string"
276bool(true)
277float(-0.01)
278string(6) "double"
279-- Iteration 22 --
280string(6) "string"
281bool(true)
282float(1)
283string(6) "double"
284-- Iteration 23 --
285string(6) "string"
286bool(true)
287float(-1)
288string(6) "double"
289-- Iteration 24 --
290string(6) "string"
291bool(true)
292float(100)
293string(6) "double"
294-- Iteration 25 --
295string(6) "string"
296bool(true)
297float(1)
298string(6) "double"
299-- Iteration 26 --
300string(6) "string"
301bool(true)
302float(2.974394749328742E+21)
303string(6) "double"
304-- Iteration 27 --
305string(6) "string"
306bool(true)
307float(-0.01)
308string(6) "double"
309-- Iteration 28 --
310string(6) "string"
311bool(true)
312float(0)
313string(6) "double"
314-- Iteration 29 --
315string(6) "string"
316bool(true)
317float(0)
318string(6) "double"
319-- Iteration 30 --
320string(6) "string"
321bool(true)
322float(0)
323string(6) "double"
324-- Iteration 31 --
325string(6) "string"
326bool(true)
327float(0)
328string(6) "double"
329-- Iteration 32 --
330string(6) "string"
331bool(true)
332float(123)
333string(6) "double"
334-- Iteration 33 --
335string(6) "string"
336bool(true)
337float(123)
338string(6) "double"
339-- Iteration 34 --
340string(6) "string"
341bool(true)
342float(-123)
343string(6) "double"
344-- Iteration 35 --
345string(6) "string"
346bool(true)
347float(123)
348string(6) "double"
349-- Iteration 36 --
350string(6) "string"
351bool(true)
352float(-123)
353string(6) "double"
354-- Iteration 37 --
355string(6) "string"
356bool(true)
357float(123)
358string(6) "double"
359-- Iteration 38 --
360string(6) "string"
361bool(true)
362float(-0)
363string(6) "double"
364-- Iteration 39 --
365string(6) "string"
366bool(true)
367float(0)
368string(6) "double"
369-- Iteration 40 --
370string(6) "string"
371bool(true)
372float(-0)
373string(6) "double"
374-- Iteration 41 --
375string(6) "string"
376bool(true)
377float(0)
378string(6) "double"
379-- Iteration 42 --
380string(6) "string"
381bool(true)
382float(0)
383string(6) "double"
384-- Iteration 43 --
385string(5) "array"
386bool(true)
387float(0)
388string(6) "double"
389-- Iteration 44 --
390string(5) "array"
391bool(true)
392float(1)
393string(6) "double"
394-- Iteration 45 --
395string(5) "array"
396bool(true)
397float(1)
398string(6) "double"
399-- Iteration 46 --
400string(5) "array"
401bool(true)
402float(1)
403string(6) "double"
404-- Iteration 47 --
405string(5) "array"
406bool(true)
407float(1)
408string(6) "double"
409-- Iteration 48 --
410string(6) "double"
411bool(true)
412float(-2147483648)
413string(6) "double"
414-- Iteration 49 --
415string(7) "integer"
416bool(true)
417float(2147483647)
418string(6) "double"
419-- Iteration 50 --
420string(6) "double"
421bool(true)
422float(2147483649)
423string(6) "double"
424-- Iteration 51 --
425string(6) "double"
426bool(true)
427float(1232147483649)
428string(6) "double"
429-- Iteration 52 --
430string(7) "integer"
431bool(true)
432float(85)
433string(6) "double"
434-- Iteration 53 --
435string(6) "double"
436bool(true)
437float(1058513956921)
438string(6) "double"
439-- Iteration 54 --
440string(7) "integer"
441bool(true)
442float(-21903)
443string(6) "double"
444-- Iteration 55 --
445string(7) "integer"
446bool(true)
447float(365)
448string(6) "double"
449-- Iteration 56 --
450string(7) "integer"
451bool(true)
452float(-365)
453string(6) "double"
454-- Iteration 57 --
455string(6) "double"
456bool(true)
457float(80561044571754)
458string(6) "double"
459-- Iteration 58 --
460string(6) "double"
461bool(true)
462float(100000)
463string(6) "double"
464-- Iteration 59 --
465string(6) "double"
466bool(true)
467float(-100000)
468string(6) "double"
469-- Iteration 60 --
470string(6) "double"
471bool(true)
472float(100000)
473string(6) "double"
474-- Iteration 61 --
475string(6) "double"
476bool(true)
477float(-100000)
478string(6) "double"
479-- Iteration 62 --
480string(6) "double"
481bool(true)
482float(-1.5)
483string(6) "double"
484-- Iteration 63 --
485string(6) "double"
486bool(true)
487float(0.5)
488string(6) "double"
489-- Iteration 64 --
490string(6) "double"
491bool(true)
492float(-0.5)
493string(6) "double"
494-- Iteration 65 --
495string(6) "double"
496bool(true)
497float(500000)
498string(6) "double"
499-- Iteration 66 --
500string(6) "double"
501bool(true)
502float(-500000)
503string(6) "double"
504-- Iteration 67 --
505string(6) "double"
506bool(true)
507float(-5.0E-7)
508string(6) "double"
509-- Iteration 68 --
510string(6) "double"
511bool(true)
512float(500000)
513string(6) "double"
514-- Iteration 69 --
515string(6) "double"
516bool(true)
517float(-500000)
518string(6) "double"
519-- Iteration 70 --
520string(6) "double"
521bool(true)
522float(512000)
523string(6) "double"
524-- Iteration 71 --
525string(6) "double"
526bool(true)
527float(-512000)
528string(6) "double"
529-- Iteration 72 --
530string(6) "double"
531bool(true)
532float(5.12E-7)
533string(6) "double"
534-- Iteration 73 --
535string(6) "double"
536bool(true)
537float(5.12E-7)
538string(6) "double"
539-- Iteration 74 --
540string(6) "double"
541bool(true)
542float(512000)
543string(6) "double"
544-- Iteration 75 --
545string(6) "double"
546bool(true)
547float(-512000)
548string(6) "double"
549-- Iteration 76 --
550string(6) "object"
5512: Object of class point could not be converted to float
552bool(true)
553float(1)
554string(6) "double"
555-- Iteration 77 --
556string(6) "object"
5572: Object of class point could not be converted to float
558bool(true)
559float(1)
560string(6) "double"
561-- Iteration 78 --
562string(6) "object"
5632: Object of class point could not be converted to float
564bool(true)
565float(1)
566string(6) "double"
567
568-- Setting type of data to double --
569-- Iteration 1 --
570string(4) "NULL"
571bool(true)
572float(0)
573string(6) "double"
574-- Iteration 2 --
575string(7) "boolean"
576bool(true)
577float(0)
578string(6) "double"
579-- Iteration 3 --
580string(7) "boolean"
581bool(true)
582float(1)
583string(6) "double"
584-- Iteration 4 --
585string(7) "boolean"
586bool(true)
587float(1)
588string(6) "double"
589-- Iteration 5 --
590string(6) "string"
591bool(true)
592float(0)
593string(6) "double"
594-- Iteration 6 --
595string(6) "string"
596bool(true)
597float(0)
598string(6) "double"
599-- Iteration 7 --
600string(6) "string"
601bool(true)
602float(3)
603string(6) "double"
604-- Iteration 8 --
605string(6) "string"
606bool(true)
607float(0)
608string(6) "double"
609-- Iteration 9 --
610string(6) "string"
611bool(true)
612float(0)
613string(6) "double"
614-- Iteration 10 --
615string(6) "string"
616bool(true)
617float(0)
618string(6) "double"
619-- Iteration 11 --
620string(6) "string"
621bool(true)
622float(0)
623string(6) "double"
624-- Iteration 12 --
625string(6) "string"
626bool(true)
627float(10)
628string(6) "double"
629-- Iteration 13 --
630string(6) "string"
631bool(true)
632float(10)
633string(6) "double"
634-- Iteration 14 --
635string(6) "string"
636bool(true)
637float(10)
638string(6) "double"
639-- Iteration 15 --
640string(6) "string"
641bool(true)
642float(10)
643string(6) "double"
644-- Iteration 16 --
645string(6) "string"
646bool(true)
647float(1)
648string(6) "double"
649-- Iteration 17 --
650string(6) "string"
651bool(true)
652float(-1)
653string(6) "double"
654-- Iteration 18 --
655string(6) "string"
656bool(true)
657float(100)
658string(6) "double"
659-- Iteration 19 --
660string(6) "string"
661bool(true)
662float(1)
663string(6) "double"
664-- Iteration 20 --
665string(6) "string"
666bool(true)
667float(2.974394749328742E+21)
668string(6) "double"
669-- Iteration 21 --
670string(6) "string"
671bool(true)
672float(-0.01)
673string(6) "double"
674-- Iteration 22 --
675string(6) "string"
676bool(true)
677float(1)
678string(6) "double"
679-- Iteration 23 --
680string(6) "string"
681bool(true)
682float(-1)
683string(6) "double"
684-- Iteration 24 --
685string(6) "string"
686bool(true)
687float(100)
688string(6) "double"
689-- Iteration 25 --
690string(6) "string"
691bool(true)
692float(1)
693string(6) "double"
694-- Iteration 26 --
695string(6) "string"
696bool(true)
697float(2.974394749328742E+21)
698string(6) "double"
699-- Iteration 27 --
700string(6) "string"
701bool(true)
702float(-0.01)
703string(6) "double"
704-- Iteration 28 --
705string(6) "string"
706bool(true)
707float(0)
708string(6) "double"
709-- Iteration 29 --
710string(6) "string"
711bool(true)
712float(0)
713string(6) "double"
714-- Iteration 30 --
715string(6) "string"
716bool(true)
717float(0)
718string(6) "double"
719-- Iteration 31 --
720string(6) "string"
721bool(true)
722float(0)
723string(6) "double"
724-- Iteration 32 --
725string(6) "string"
726bool(true)
727float(123)
728string(6) "double"
729-- Iteration 33 --
730string(6) "string"
731bool(true)
732float(123)
733string(6) "double"
734-- Iteration 34 --
735string(6) "string"
736bool(true)
737float(-123)
738string(6) "double"
739-- Iteration 35 --
740string(6) "string"
741bool(true)
742float(123)
743string(6) "double"
744-- Iteration 36 --
745string(6) "string"
746bool(true)
747float(-123)
748string(6) "double"
749-- Iteration 37 --
750string(6) "string"
751bool(true)
752float(123)
753string(6) "double"
754-- Iteration 38 --
755string(6) "string"
756bool(true)
757float(-0)
758string(6) "double"
759-- Iteration 39 --
760string(6) "string"
761bool(true)
762float(0)
763string(6) "double"
764-- Iteration 40 --
765string(6) "string"
766bool(true)
767float(-0)
768string(6) "double"
769-- Iteration 41 --
770string(6) "string"
771bool(true)
772float(0)
773string(6) "double"
774-- Iteration 42 --
775string(6) "string"
776bool(true)
777float(0)
778string(6) "double"
779-- Iteration 43 --
780string(5) "array"
781bool(true)
782float(0)
783string(6) "double"
784-- Iteration 44 --
785string(5) "array"
786bool(true)
787float(1)
788string(6) "double"
789-- Iteration 45 --
790string(5) "array"
791bool(true)
792float(1)
793string(6) "double"
794-- Iteration 46 --
795string(5) "array"
796bool(true)
797float(1)
798string(6) "double"
799-- Iteration 47 --
800string(5) "array"
801bool(true)
802float(1)
803string(6) "double"
804-- Iteration 48 --
805string(6) "double"
806bool(true)
807float(-2147483648)
808string(6) "double"
809-- Iteration 49 --
810string(7) "integer"
811bool(true)
812float(2147483647)
813string(6) "double"
814-- Iteration 50 --
815string(6) "double"
816bool(true)
817float(2147483649)
818string(6) "double"
819-- Iteration 51 --
820string(6) "double"
821bool(true)
822float(1232147483649)
823string(6) "double"
824-- Iteration 52 --
825string(7) "integer"
826bool(true)
827float(85)
828string(6) "double"
829-- Iteration 53 --
830string(6) "double"
831bool(true)
832float(1058513956921)
833string(6) "double"
834-- Iteration 54 --
835string(7) "integer"
836bool(true)
837float(-21903)
838string(6) "double"
839-- Iteration 55 --
840string(7) "integer"
841bool(true)
842float(365)
843string(6) "double"
844-- Iteration 56 --
845string(7) "integer"
846bool(true)
847float(-365)
848string(6) "double"
849-- Iteration 57 --
850string(6) "double"
851bool(true)
852float(80561044571754)
853string(6) "double"
854-- Iteration 58 --
855string(6) "double"
856bool(true)
857float(100000)
858string(6) "double"
859-- Iteration 59 --
860string(6) "double"
861bool(true)
862float(-100000)
863string(6) "double"
864-- Iteration 60 --
865string(6) "double"
866bool(true)
867float(100000)
868string(6) "double"
869-- Iteration 61 --
870string(6) "double"
871bool(true)
872float(-100000)
873string(6) "double"
874-- Iteration 62 --
875string(6) "double"
876bool(true)
877float(-1.5)
878string(6) "double"
879-- Iteration 63 --
880string(6) "double"
881bool(true)
882float(0.5)
883string(6) "double"
884-- Iteration 64 --
885string(6) "double"
886bool(true)
887float(-0.5)
888string(6) "double"
889-- Iteration 65 --
890string(6) "double"
891bool(true)
892float(500000)
893string(6) "double"
894-- Iteration 66 --
895string(6) "double"
896bool(true)
897float(-500000)
898string(6) "double"
899-- Iteration 67 --
900string(6) "double"
901bool(true)
902float(-5.0E-7)
903string(6) "double"
904-- Iteration 68 --
905string(6) "double"
906bool(true)
907float(500000)
908string(6) "double"
909-- Iteration 69 --
910string(6) "double"
911bool(true)
912float(-500000)
913string(6) "double"
914-- Iteration 70 --
915string(6) "double"
916bool(true)
917float(512000)
918string(6) "double"
919-- Iteration 71 --
920string(6) "double"
921bool(true)
922float(-512000)
923string(6) "double"
924-- Iteration 72 --
925string(6) "double"
926bool(true)
927float(5.12E-7)
928string(6) "double"
929-- Iteration 73 --
930string(6) "double"
931bool(true)
932float(5.12E-7)
933string(6) "double"
934-- Iteration 74 --
935string(6) "double"
936bool(true)
937float(512000)
938string(6) "double"
939-- Iteration 75 --
940string(6) "double"
941bool(true)
942float(-512000)
943string(6) "double"
944-- Iteration 76 --
945string(6) "object"
9462: Object of class point could not be converted to float
947bool(true)
948float(1)
949string(6) "double"
950-- Iteration 77 --
951string(6) "object"
9522: Object of class point could not be converted to float
953bool(true)
954float(1)
955string(6) "double"
956-- Iteration 78 --
957string(6) "object"
9582: Object of class point could not be converted to float
959bool(true)
960float(1)
961string(6) "double"
962Done
963