authorgravatar for r00ster91@proton.meWooster <r00ster91@proton.me> 2023-07-02 10:01:18-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-07-03 10:59:13-07:00
log2583a39fb6f85fa65caba04f202c1654a5e8f3f6
treebe8639041db97f19d00905e16af06bfb283aafb8
parentcb5a6be41ae0efc30d0b59a41b0763db966e5bf4

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

1 files changed, 44 insertions(+), 0 deletions(-)

test/behavior/bitcast.zig+44
...@@ -459,3 +459,47 @@ test "bitcast nan float does modify signaling bit" {...@@ -459,3 +459,47 @@ test "bitcast nan float does modify signaling bit" {
459 try expectEqual(math.nan_u128, @as(u128, @bitCast(snan_f128_var)));459 try expectEqual(math.nan_u128, @as(u128, @bitCast(snan_f128_var)));
460 try expectEqual(math.nan_u128, bitCastWrapper128(snan_f128_var));460 try expectEqual(math.nan_u128, bitCastWrapper128(snan_f128_var));
461}461}
462
463test "@bitCast of packed struct of bools all true" {
464 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
465 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
466 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
467 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
468 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
469 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
470
471 const P = packed struct {
472 b0: bool,
473 b1: bool,
474 b2: bool,
475 b3: bool,
476 };
477 var p = std.mem.zeroes(P);
478 p.b0 = true;
479 p.b1 = true;
480 p.b2 = true;
481 p.b3 = true;
482 try expect(@as(u8, @as(u4, @bitCast(p))) == 15);
483}
484
485test "@bitCast of packed struct of bools all false" {
486 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
487 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
488 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
489 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
490 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
491 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
492
493 const P = packed struct {
494 b0: bool,
495 b1: bool,
496 b2: bool,
497 b3: bool,
498 };
499 var p = std.mem.zeroes(P);
500 p.b0 = false;
501 p.b1 = false;
502 p.b2 = false;
503 p.b3 = false;
504 try expect(@as(u8, @as(u4, @bitCast(p))) == 0);
505}