xref: /php-src/ext/ffi/tests/040.phpt (revision 4acf0084)
1--TEST--
2FFI 040: Support for scalar types
3--EXTENSIONS--
4ffi
5--SKIPIF--
6<?php
7if (pack('S', 0xABCD) !== pack('v', 0xABCD)) {
8    die('skip for little-endian architectures only');
9}
10?>
11--INI--
12ffi.enable=1
13--FILE--
14<?php
15$ffi = FFI::cdef();
16
17$x = $ffi->new("int");
18$x->cdata = 5;
19var_dump($x);
20var_dump(FFI::typeof($x));
21var_dump($ffi->cast("int8_t[4]", $x));
22$p = FFI::addr($x);
23var_dump($p);
24$p[0] += 2;
25var_dump($x);
26var_dump(FFI::sizeof($x));
27var_dump(FFI::alignof($x));
28FFI::memset($x, ord("a"), 4);
29var_dump(FFI::string($x, 4));
30
31echo "\n";
32
33$y = FFI::cdef()->new("int[2]");
34$y[0] = 6;
35var_dump($y[0]);
36var_dump(FFI::typeof($y[0]));
37var_dump(FFI::cdef()->cast("int8_t[4]", $y[0]));
38$p = FFI::addr($y[0]);
39var_dump($p);
40$p[0] += 2;
41var_dump($y[0]);
42var_dump(FFI::sizeof($y[0]));
43var_dump(FFI::alignof($y[0]));
44FFI::memset($y[0], ord("b"), 4);
45var_dump(FFI::string($y[0], 4));
46
47echo "\n";
48
49var_dump(FFI::memcmp($x, $y[0], 4));
50FFI::memcpy($x, $y[0], 4);
51var_dump(FFI::memcmp($x, $y[0], 4));
52?>
53--EXPECTF--
54object(FFI\CData:int32_t)#%d (1) {
55  ["cdata"]=>
56  int(5)
57}
58object(FFI\CType:int32_t)#%d (0) {
59}
60object(FFI\CData:int8_t[4])#%d (4) {
61  [0]=>
62  int(5)
63  [1]=>
64  int(0)
65  [2]=>
66  int(0)
67  [3]=>
68  int(0)
69}
70object(FFI\CData:int32_t*)#%d (1) {
71  [0]=>
72  int(5)
73}
74object(FFI\CData:int32_t)#%d (1) {
75  ["cdata"]=>
76  int(7)
77}
78int(4)
79int(4)
80string(4) "aaaa"
81
82int(6)
83object(FFI\CType:int32_t)#%d (0) {
84}
85object(FFI\CData:int8_t[4])#%d (4) {
86  [0]=>
87  int(6)
88  [1]=>
89  int(0)
90  [2]=>
91  int(0)
92  [3]=>
93  int(0)
94}
95object(FFI\CData:int32_t*)#%d (1) {
96  [0]=>
97  int(6)
98}
99int(8)
100int(4)
101int(4)
102string(4) "bbbb"
103
104int(-1)
105int(0)
106