motiejus/zig

fork of https://codeberg.org/ziglang/zig
git clone https://git.jakstys.lt/motiejus/zig.git
Log | Tree | Refs | README | LICENSE

commit 2583a39fb6f85fa65caba04f202c1654a5e8f3f6 (tree)
parent cb5a6be41ae0efc30d0b59a41b0763db966e5bf4
Author: r00ster91 <r00ster91@proton.me>
Date:   Sun,  2 Jul 2023 10:01:18 -0400

behavior: test @bitCast of packed struct of bools

This seems to have resolved itself now.
Tested on x86_64 using debug optimize mode.

Closes #9851

Diffstat:
Mtest/behavior/bitcast.zig | 44++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+), 0 deletions(-)

diff --git 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); +}