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