authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-09 20:37:24-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-06-09 20:37:24-07:00
log58bc562cb45d5d27fed2e69ee289a4b5c9199cff
treedc6f5c20284f47aab523273dec68750961a1cd5b
parent32c90cb5539c3b340ae1b0b13d2b1521ebb6b1b0

update packed struct behavior tests to new language semantics


1 files changed, 25 insertions(+), 20 deletions(-)

test/behavior/packed-struct.zig+25-20
...@@ -33,10 +33,10 @@ test "correct size of packed structs" {...@@ -33,10 +33,10 @@ test "correct size of packed structs" {
33}33}
3434
35test "flags in packed structs" {35test "flags in packed structs" {
36 if (builtin.zig_backend != .stage1) return error.SkipZigTest;36 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
3737
38 const Flags1 = packed struct {38 const Flags1 = packed struct {
39 // byte 039 // first 8 bits
40 b0_0: u1,40 b0_0: u1,
41 b0_1: u1,41 b0_1: u1,
42 b0_2: u1,42 b0_2: u1,
...@@ -46,7 +46,7 @@ test "flags in packed structs" {...@@ -46,7 +46,7 @@ test "flags in packed structs" {
46 b0_6: u1,46 b0_6: u1,
47 b0_7: u1,47 b0_7: u1,
4848
49 // partial byte 1 (but not 8 bits)49 // 7 more bits
50 b1_0: u1,50 b1_0: u1,
51 b1_1: u1,51 b1_1: u1,
52 b1_2: u1,52 b1_2: u1,
...@@ -55,12 +55,12 @@ test "flags in packed structs" {...@@ -55,12 +55,12 @@ test "flags in packed structs" {
55 b1_5: u1,55 b1_5: u1,
56 b1_6: u1,56 b1_6: u1,
5757
58 // some padding to fill to size 358 // some padding to fill to 24 bits
59 _: u9,59 _: u9,
60 };60 };
6161
62 try expectEqual(3, @sizeOf(Flags1));62 try expectEqual(@sizeOf(u24), @sizeOf(Flags1));
63 try expectEqual(3 * 8, @bitSizeOf(Flags1));63 try expectEqual(24, @bitSizeOf(Flags1));
6464
65 const Flags2 = packed struct {65 const Flags2 = packed struct {
66 // byte 066 // byte 0
...@@ -86,8 +86,8 @@ test "flags in packed structs" {...@@ -86,8 +86,8 @@ test "flags in packed structs" {
86 _: u10,86 _: u10,
87 };87 };
8888
89 try expectEqual(4, @sizeOf(Flags2));89 try expectEqual(@sizeOf(u25), @sizeOf(Flags2));
90 try expectEqual(8 + 7 + 10, @bitSizeOf(Flags2));90 try expectEqual(25, @bitSizeOf(Flags2));
9191
92 const Flags3 = packed struct {92 const Flags3 = packed struct {
93 // byte 093 // byte 0
...@@ -114,30 +114,30 @@ test "flags in packed structs" {...@@ -114,30 +114,30 @@ test "flags in packed structs" {
114 _: u16, // it works, if the padding is 8-based114 _: u16, // it works, if the padding is 8-based
115 };115 };
116116
117 try expectEqual(4, @sizeOf(Flags3));117 try expectEqual(@sizeOf(u32), @sizeOf(Flags3));
118 try expectEqual(4 * 8, @bitSizeOf(Flags3));118 try expectEqual(32, @bitSizeOf(Flags3));
119}119}
120120
121test "arrays in packed structs" {121test "arrays in packed structs" {
122 if (builtin.zig_backend != .stage1) return error.SkipZigTest;122 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
123123
124 const T1 = packed struct { array: [3][3]u8 };124 const T1 = packed struct { array: [3][3]u8 };
125 const T2 = packed struct { array: [9]u8 };125 const T2 = packed struct { array: [9]u8 };
126126
127 try expectEqual(9, @sizeOf(T1));127 try expectEqual(@sizeOf(u72), @sizeOf(T1));
128 try expectEqual(9 * 8, @bitSizeOf(T1));128 try expectEqual(72, @bitSizeOf(T1));
129 try expectEqual(9, @sizeOf(T2));129 try expectEqual(@sizeOf(u72), @sizeOf(T2));
130 try expectEqual(9 * 8, @bitSizeOf(T2));130 try expectEqual(72, @bitSizeOf(T2));
131}131}
132132
133test "consistent size of packed structs" {133test "consistent size of packed structs" {
134 if (builtin.zig_backend != .stage1) return error.SkipZigTest;134 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
135135
136 const TxData1 = packed struct { data: u8, _23: u23, full: bool = false };136 const TxData1 = packed struct { data: u8, _23: u23, full: bool = false };
137 const TxData2 = packed struct { data: u9, _22: u22, full: bool = false };137 const TxData2 = packed struct { data: u9, _22: u22, full: bool = false };
138138
139 const register_size_bits = 32;139 const register_size_bits = 32;
140 const register_size_bytes = register_size_bits / 8;140 const register_size_bytes = @sizeOf(u32);
141141
142 try expectEqual(register_size_bits, @bitSizeOf(TxData1));142 try expectEqual(register_size_bits, @bitSizeOf(TxData1));
143 try expectEqual(register_size_bytes, @sizeOf(TxData1));143 try expectEqual(register_size_bytes, @sizeOf(TxData1));
...@@ -151,7 +151,7 @@ test "consistent size of packed structs" {...@@ -151,7 +151,7 @@ test "consistent size of packed structs" {
151 const TxData6 = packed struct { a: u24, b: u32 };151 const TxData6 = packed struct { a: u24, b: u32 };
152152
153 const expectedBitSize = 56;153 const expectedBitSize = 56;
154 const expectedByteSize = expectedBitSize / 8;154 const expectedByteSize = @sizeOf(u56);
155155
156 try expectEqual(expectedBitSize, @bitSizeOf(TxData3));156 try expectEqual(expectedBitSize, @bitSizeOf(TxData3));
157 try expectEqual(expectedByteSize, @sizeOf(TxData3));157 try expectEqual(expectedByteSize, @sizeOf(TxData3));
...@@ -167,7 +167,12 @@ test "consistent size of packed structs" {...@@ -167,7 +167,12 @@ test "consistent size of packed structs" {
167}167}
168168
169test "correct sizeOf and offsets in packed structs" {169test "correct sizeOf and offsets in packed structs" {
170 if (builtin.zig_backend != .stage1) return error.SkipZigTest;170 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
171 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
172 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
173 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
174 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
175 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
171176
172 const PStruct = packed struct {177 const PStruct = packed struct {
173 bool_a: bool,178 bool_a: bool,
...@@ -234,7 +239,7 @@ test "correct sizeOf and offsets in packed structs" {...@@ -234,7 +239,7 @@ test "correct sizeOf and offsets in packed structs" {
234239
235 try expectEqual(16, @offsetOf(S, "b"));240 try expectEqual(16, @offsetOf(S, "b"));
236 try expectEqual(128, @bitOffsetOf(S, "b"));241 try expectEqual(128, @bitOffsetOf(S, "b"));
237 try expectEqual(20, @sizeOf(S));242 try expectEqual(@sizeOf(u160), @sizeOf(S));
238}243}
239244
240test "nested packed structs" {245test "nested packed structs" {