diff --git a/test/behavior/bitcast.zig b/test/behavior/bitcast.zig index 0c137a2baa..49fc85a13e 100644 --- a/test/behavior/bitcast.zig +++ b/test/behavior/bitcast.zig @@ -459,3 +459,47 @@ test "bitcast nan float does modify signaling bit" { try expectEqual(math.nan_u128, @as(u128, @bitCast(snan_f128_var))); try expectEqual(math.nan_u128, bitCastWrapper128(snan_f128_var)); } + +test "@bitCast of packed struct of bools all true" { + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO + + const P = packed struct { + b0: bool, + b1: bool, + b2: bool, + b3: bool, + }; + var p = std.mem.zeroes(P); + p.b0 = true; + p.b1 = true; + p.b2 = true; + p.b3 = true; + try expect(@as(u8, @as(u4, @bitCast(p))) == 15); +} + +test "@bitCast of packed struct of bools all false" { + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO + + const P = packed struct { + b0: bool, + b1: bool, + b2: bool, + b3: bool, + }; + var p = std.mem.zeroes(P); + p.b0 = false; + p.b1 = false; + p.b2 = false; + p.b3 = false; + try expect(@as(u8, @as(u4, @bitCast(p))) == 0); +}