zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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