| ... | ... | @@ -33,10 +33,10 @@ test "correct size of packed structs" { |
| 33 | 33 | } |
| 34 | 34 | |
| 35 | 35 | test "flags in packed structs" { |
| 36 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; |
| 36 | if (builtin.zig_backend == .stage1) return error.SkipZigTest; |
| 37 | 37 | |
| 38 | 38 | const Flags1 = packed struct { |
| 39 | | // byte 0 |
| 39 | // first 8 bits |
| 40 | 40 | b0_0: u1, |
| 41 | 41 | b0_1: u1, |
| 42 | 42 | b0_2: u1, |
| ... | ... | @@ -46,7 +46,7 @@ test "flags in packed structs" { |
| 46 | 46 | b0_6: u1, |
| 47 | 47 | b0_7: u1, |
| 48 | 48 | |
| 49 | | // partial byte 1 (but not 8 bits) |
| 49 | // 7 more bits |
| 50 | 50 | b1_0: u1, |
| 51 | 51 | b1_1: u1, |
| 52 | 52 | b1_2: u1, |
| ... | ... | @@ -55,12 +55,12 @@ test "flags in packed structs" { |
| 55 | 55 | b1_5: u1, |
| 56 | 56 | b1_6: u1, |
| 57 | 57 | |
| 58 | | // some padding to fill to size 3 |
| 58 | // some padding to fill to 24 bits |
| 59 | 59 | _: u9, |
| 60 | 60 | }; |
| 61 | 61 | |
| 62 | | try expectEqual(3, @sizeOf(Flags1)); |
| 63 | | try expectEqual(3 * 8, @bitSizeOf(Flags1)); |
| 62 | try expectEqual(@sizeOf(u24), @sizeOf(Flags1)); |
| 63 | try expectEqual(24, @bitSizeOf(Flags1)); |
| 64 | 64 | |
| 65 | 65 | const Flags2 = packed struct { |
| 66 | 66 | // byte 0 |
| ... | ... | @@ -86,8 +86,8 @@ test "flags in packed structs" { |
| 86 | 86 | _: u10, |
| 87 | 87 | }; |
| 88 | 88 | |
| 89 | | try expectEqual(4, @sizeOf(Flags2)); |
| 90 | | try expectEqual(8 + 7 + 10, @bitSizeOf(Flags2)); |
| 89 | try expectEqual(@sizeOf(u25), @sizeOf(Flags2)); |
| 90 | try expectEqual(25, @bitSizeOf(Flags2)); |
| 91 | 91 | |
| 92 | 92 | const Flags3 = packed struct { |
| 93 | 93 | // byte 0 |
| ... | ... | @@ -114,30 +114,30 @@ test "flags in packed structs" { |
| 114 | 114 | _: u16, // it works, if the padding is 8-based |
| 115 | 115 | }; |
| 116 | 116 | |
| 117 | | try expectEqual(4, @sizeOf(Flags3)); |
| 118 | | try expectEqual(4 * 8, @bitSizeOf(Flags3)); |
| 117 | try expectEqual(@sizeOf(u32), @sizeOf(Flags3)); |
| 118 | try expectEqual(32, @bitSizeOf(Flags3)); |
| 119 | 119 | } |
| 120 | 120 | |
| 121 | 121 | test "arrays in packed structs" { |
| 122 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; |
| 122 | if (builtin.zig_backend == .stage1) return error.SkipZigTest; |
| 123 | 123 | |
| 124 | 124 | const T1 = packed struct { array: [3][3]u8 }; |
| 125 | 125 | const T2 = packed struct { array: [9]u8 }; |
| 126 | 126 | |
| 127 | | try expectEqual(9, @sizeOf(T1)); |
| 128 | | try expectEqual(9 * 8, @bitSizeOf(T1)); |
| 129 | | try expectEqual(9, @sizeOf(T2)); |
| 130 | | try expectEqual(9 * 8, @bitSizeOf(T2)); |
| 127 | try expectEqual(@sizeOf(u72), @sizeOf(T1)); |
| 128 | try expectEqual(72, @bitSizeOf(T1)); |
| 129 | try expectEqual(@sizeOf(u72), @sizeOf(T2)); |
| 130 | try expectEqual(72, @bitSizeOf(T2)); |
| 131 | 131 | } |
| 132 | 132 | |
| 133 | 133 | test "consistent size of packed structs" { |
| 134 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; |
| 134 | if (builtin.zig_backend == .stage1) return error.SkipZigTest; |
| 135 | 135 | |
| 136 | 136 | const TxData1 = packed struct { data: u8, _23: u23, full: bool = false }; |
| 137 | 137 | const TxData2 = packed struct { data: u9, _22: u22, full: bool = false }; |
| 138 | 138 | |
| 139 | 139 | const register_size_bits = 32; |
| 140 | | const register_size_bytes = register_size_bits / 8; |
| 140 | const register_size_bytes = @sizeOf(u32); |
| 141 | 141 | |
| 142 | 142 | try expectEqual(register_size_bits, @bitSizeOf(TxData1)); |
| 143 | 143 | try expectEqual(register_size_bytes, @sizeOf(TxData1)); |
| ... | ... | @@ -151,7 +151,7 @@ test "consistent size of packed structs" { |
| 151 | 151 | const TxData6 = packed struct { a: u24, b: u32 }; |
| 152 | 152 | |
| 153 | 153 | const expectedBitSize = 56; |
| 154 | | const expectedByteSize = expectedBitSize / 8; |
| 154 | const expectedByteSize = @sizeOf(u56); |
| 155 | 155 | |
| 156 | 156 | try expectEqual(expectedBitSize, @bitSizeOf(TxData3)); |
| 157 | 157 | try expectEqual(expectedByteSize, @sizeOf(TxData3)); |
| ... | ... | @@ -167,7 +167,12 @@ test "consistent size of packed structs" { |
| 167 | 167 | } |
| 168 | 168 | |
| 169 | 169 | test "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 |
| 171 | 176 | |
| 172 | 177 | const PStruct = packed struct { |
| 173 | 178 | bool_a: bool, |
| ... | ... | @@ -234,7 +239,7 @@ test "correct sizeOf and offsets in packed structs" { |
| 234 | 239 | |
| 235 | 240 | try expectEqual(16, @offsetOf(S, "b")); |
| 236 | 241 | try expectEqual(128, @bitOffsetOf(S, "b")); |
| 237 | | try expectEqual(20, @sizeOf(S)); |
| 242 | try expectEqual(@sizeOf(u160), @sizeOf(S)); |
| 238 | 243 | } |
| 239 | 244 | |
| 240 | 245 | test "nested packed structs" { |