test_packed_structs.zig (996B) - Raw
1 const std = @import("std"); 2 const native_endian = @import("builtin").target.cpu.arch.endian(); 3 const expect = std.testing.expect; 4 5 const Full = packed struct { 6 number: u16, 7 }; 8 const Divided = packed struct { 9 half1: u8, 10 quarter3: u4, 11 quarter4: u4, 12 }; 13 14 test "@bitCast between packed structs" { 15 try doTheTest(); 16 try comptime doTheTest(); 17 } 18 19 fn doTheTest() !void { 20 try expect(@sizeOf(Full) == 2); 21 try expect(@sizeOf(Divided) == 2); 22 const full = Full{ .number = 0x1234 }; 23 const divided: Divided = @bitCast(full); 24 try expect(divided.half1 == 0x34); 25 try expect(divided.quarter3 == 0x2); 26 try expect(divided.quarter4 == 0x1); 27 28 const ordered: [2]u8 = @bitCast(full); 29 switch (native_endian) { 30 .big => { 31 try expect(ordered[0] == 0x12); 32 try expect(ordered[1] == 0x34); 33 }, 34 .little => { 35 try expect(ordered[0] == 0x34); 36 try expect(ordered[1] == 0x12); 37 }, 38 } 39 } 40 41 // test