| ... | ... | @@ -3277,7 +3277,7 @@ test "default struct initialization fields" { |
| 3277 | 3277 | Unlike normal structs, {#syntax#}packed{#endsyntax#} structs have guaranteed in-memory layout: |
| 3278 | 3278 | </p> |
| 3279 | 3279 | <ul> |
| 3280 | | <li>Fields remain in the order declared.</li> |
| 3280 | <li>Fields remain in the order declared, least to most significant.</li> |
| 3281 | 3281 | <li>There is no padding between fields.</li> |
| 3282 | 3282 | <li>Zig supports arbitrary width {#link|Integers#} and although normally, integers with fewer |
| 3283 | 3283 | than 8 bits will still use 1 byte of memory, in packed structs, they use |
| ... | ... | @@ -3320,16 +3320,19 @@ fn doTheTest() !void { |
| 3320 | 3320 | try expect(@sizeOf(Divided) == 2); |
| 3321 | 3321 | var full = Full{ .number = 0x1234 }; |
| 3322 | 3322 | var divided = @bitCast(Divided, full); |
| 3323 | try expect(divided.half1 == 0x34); |
| 3324 | try expect(divided.quarter3 == 0x2); |
| 3325 | try expect(divided.quarter4 == 0x1); |
| 3326 | |
| 3327 | var ordered = @bitCast([2]u8, full); |
| 3323 | 3328 | switch (native_endian) { |
| 3324 | 3329 | .Big => { |
| 3325 | | try expect(divided.half1 == 0x12); |
| 3326 | | try expect(divided.quarter3 == 0x3); |
| 3327 | | try expect(divided.quarter4 == 0x4); |
| 3330 | try expect(ordered[0] == 0x12); |
| 3331 | try expect(ordered[1] == 0x34); |
| 3328 | 3332 | }, |
| 3329 | 3333 | .Little => { |
| 3330 | | try expect(divided.half1 == 0x34); |
| 3331 | | try expect(divided.quarter3 == 0x2); |
| 3332 | | try expect(divided.quarter4 == 0x1); |
| 3334 | try expect(ordered[0] == 0x34); |
| 3335 | try expect(ordered[1] == 0x12); |
| 3333 | 3336 | }, |
| 3334 | 3337 | } |
| 3335 | 3338 | } |