040.phpt 1.5 KB

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