| ... | @@ -33,10 +33,10 @@ test "correct size of packed structs" { | ... | @@ -33,10 +33,10 @@ test "correct size of packed structs" { |
| 33 | } | 33 | } |
| 34 | | 34 | |
| 35 | test "flags in packed structs" { | 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 | const Flags1 = packed struct { | 38 | const Flags1 = packed struct { |
| 39 | // byte 0 | 39 | // 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, |
| 48 | | 48 | |
| 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, |
| 57 | | 57 | |
| 58 | // some padding to fill to size 3 | 58 | // some padding to fill to 24 bits |
| 59 | _: u9, | 59 | _: u9, |
| 60 | }; | 60 | }; |
| 61 | | 61 | |
| 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)); |
| 64 | | 64 | |
| 65 | const Flags2 = packed struct { | 65 | const Flags2 = packed struct { |
| 66 | // byte 0 | 66 | // 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 | }; |
| 88 | | 88 | |
| 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)); |
| 91 | | 91 | |
| 92 | const Flags3 = packed struct { | 92 | const Flags3 = packed struct { |
| 93 | // byte 0 | 93 | // 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-based | 114 | _: u16, // it works, if the padding is 8-based |
| 115 | }; | 115 | }; |
| 116 | | 116 | |
| 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 | } |
| 120 | | 120 | |
| 121 | test "arrays in packed structs" { | 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 | 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 }; |
| 126 | | 126 | |
| 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 | } |
| 132 | | 132 | |
| 133 | test "consistent size of packed structs" { | 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 | 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 }; |
| 138 | | 138 | |
| 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); |
| 141 | | 141 | |
| 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 }; |
| 152 | | 152 | |
| 153 | const expectedBitSize = 56; | 153 | const expectedBitSize = 56; |
| 154 | const expectedByteSize = expectedBitSize / 8; | 154 | const expectedByteSize = @sizeOf(u56); |
| 155 | | 155 | |
| 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 | } |
| 168 | | 168 | |
| 169 | test "correct sizeOf and offsets in packed structs" { | 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 | 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" { |
| 234 | | 239 | |
| 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 | } |
| 239 | | 244 | |
| 240 | test "nested packed structs" { | 245 | test "nested packed structs" { |