021.phpt 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. --TEST--
  2. FFI 021: packed enums
  3. --EXTENSIONS--
  4. ffi
  5. --INI--
  6. ffi.enable=1
  7. --FILE--
  8. <?php
  9. function test($size, $type) {
  10. if (FFI::sizeof(FFI::new($type)) !== $size) {
  11. echo "FAIL: sizeof($type) != $size\n";
  12. }
  13. }
  14. test(4, "enum {a1, b1}");
  15. test(1, "enum __attribute__((packed)) {a2, b2}");
  16. test(4, "enum {a3=0, b3=0x80000000}");
  17. test(8, "enum {a4=-1, b4=0x80000000}");
  18. test(8, "enum {a5=0x80000000, b5=-1}");
  19. test(4, "enum {a6=-1, b6=0x7fffffff}");
  20. test(8, "enum {a7=-1, b7=0x7fffffff, c7}");
  21. test(1, "enum __attribute__((packed)) {a8=0, b8=0xff}");
  22. test(2, "enum __attribute__((packed)) {a9=0, b9=0x100}");
  23. test(1, "enum __attribute__((packed)) {a10=-1, b10=0x7f}");
  24. test(2, "enum __attribute__((packed)) {a11=-1, b11=0x80}");
  25. test(1, "enum __attribute__((packed)) {a12=0x7f, b12=-0x80}");
  26. test(2, "enum __attribute__((packed)) {a13=0x7f, b13=-0x81}");
  27. test(2, "enum __attribute__((packed)) {a8=0, b8=0xffff}");
  28. test(4, "enum __attribute__((packed)) {a9=0, b9=0x10000}");
  29. test(2, "enum __attribute__((packed)) {a10=-1, b10=0x7f00}");
  30. test(4, "enum __attribute__((packed)) {a11=-1, b11=0x8000}");
  31. test(2, "enum __attribute__((packed)) {a12=0x7f00, b12=-0x8000}");
  32. test(4, "enum __attribute__((packed)) {a13=0x7f00, b13=-0x8001}");
  33. test(4, "enum __attribute__((packed)) {a8=0, b8=0xffffffff}");
  34. test(8, "enum __attribute__((packed)) {a9=0, b9=0x100000000}");
  35. test(4, "enum __attribute__((packed)) {a10=-1, b10=0x7f000000}");
  36. test(8, "enum __attribute__((packed)) {a11=-1, b11=0x80000000}");
  37. test(4, "enum __attribute__((packed)) {a12=0x7f000000, b12=-0x80000000}");
  38. test(8, "enum __attribute__((packed)) {a13=0x7f000000, b13=-0x80000001}");
  39. test(1, "enum __attribute__((packed)) {a14=-0x80}");
  40. test(2, "enum __attribute__((packed)) {a14=-0x81}");
  41. test(2, "enum __attribute__((packed)) {a14=-0x8000}");
  42. test(4, "enum __attribute__((packed)) {a14=-0x8001}");
  43. test(4, "enum __attribute__((packed)) {a14=-0x80000000}");
  44. test(8, "enum __attribute__((packed)) {a14=-0x80000001}");
  45. ?>
  46. ok
  47. --EXPECT--
  48. ok