1--TEST--
2Test vfprintf() function : usage variations - int formats with non-integer values
3--SKIPIF--
4<?php
5if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
6?>
7--FILE--
8<?php
9/* Prototype  : int vfprintf  ( resource $handle  , string $format , array $args  )
10 * Description: Write a formatted string to a stream
11 * Source code: ext/standard/formatted_print.c
12*/
13
14/*
15 * Test vfprintf() when different int formats and non-int values are passed to
16 * the '$format' and '$args' arguments of the function
17*/
18
19echo "*** Testing vfprintf() : int formats and non-integer values ***\n";
20
21// defining array of int formats
22$formats =
23  '%d %+d %-d
24   %ld %Ld %4d %-4d
25   %10.4d %-10.4d %.4d %04.4d
26   %\'#2d %\'2d %\'$2d %\'_2d
27   %3$d %4$d %1$d %2$d';
28
29// Arrays of non int values for the format defined in $format.
30// Each sub array contains non int values which correspond to each format in $format
31$args_array = array(
32
33  // array of float values
34  array(2.2, .2, 10.2,
35        123456.234, 123456.234, -1234.6789, +1234.6789,
36        2e10, +2e5, 4e3, 22e+6,
37        12345.780, 12.000000011111, -12.00000111111, -123456.234,
38        3.33, +4.44, 1.11,-2.22 ),
39
40  // array of strings
41  array(" ", ' ', 'hello',
42        '123hello', "123hello", '-123hello', '+123hello',
43        "\12345678hello", "-\12345678hello", '0123456hello', 'h123456ello',
44        "1234hello", "hello\0world", "NULL", "true",
45        "3", "4", '1', '2'),
46
47  // different arrays
48  array( array(0), array(1, 2), array(-1, -1),
49         array("123"), array('123'), array('-123'), array("-123"),
50         array(true), array(false), array(TRUE), array(FALSE),
51         array("123hello"), array("1", "2"), array('123hello'), array(12=>"12twelve"),
52         array("3"), array("4"), array("1"), array("2") ),
53
54  // array of boolean data
55  array( true, TRUE, false,
56         TRUE, 0, FALSE, 1,
57         true, false, TRUE, FALSE,
58         0, 1, 1, 0,
59         1, TRUE, 0, FALSE),
60
61);
62
63
64/* creating dumping file */
65$data_file = dirname(__FILE__) . '/dump.txt';
66if (!($fp = fopen($data_file, 'wt')))
67   return;
68
69// looping to test vfprintf() with different int formats from the above $format array
70// and with non-int values from the above $args_array array
71$counter = 1;
72foreach($args_array as $args) {
73  fprintf($fp, "\n-- Iteration %d --\n",$counter);
74  vfprintf($fp, $formats, $args);
75  $counter++;
76}
77
78fclose($fp);
79print_r(file_get_contents($data_file));
80echo "\n";
81
82unlink($data_file);
83
84?>
85===DONE===
86--EXPECT--
87*** Testing vfprintf() : int formats and non-integer values ***
88
89-- Iteration 1 --
902 +0 10
91   123456 d -1234 1234
92   20000000000 200000     4000 22000000
93   12345 12 -12 -123456
94   10 123456 2 0
95-- Iteration 2 --
960 +0 0
97   123 d -123 123
98            0 0          123456 0000
99   1234 0 $0 _0
100   0 123 0 0
101-- Iteration 3 --
1021 +1 1
103   1 d    1 1
104            1 1          1 0001
105   #1 1 $1 _1
106   1 1 1 1
107-- Iteration 4 --
1081 +1 0
109   1 d    0 1
110            1 0          1 0000
111   #0 1 $1 _0
112   0 1 1 1
113===DONE===
114