diff options
| author | Hardy <hardy7cc@gmail.com> | 2023-01-11 23:15:34 +0100 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-01-20 16:42:24 +0200 |
| commit | 37fe41792c72f98657e5c51caa5bfd9ded7eb409 (patch) | |
| tree | fe0c69e28fcc4c34f87296f03a0de3a50cfaa9c0 /test/behavior | |
| parent | fe6dcdba1407f00584725318404814571cdbd828 (diff) | |
| download | zig-37fe41792c72f98657e5c51caa5bfd9ded7eb409.tar.gz zig-37fe41792c72f98657e5c51caa5bfd9ded7eb409.zip | |
added test for bitcast signaled nan float
This was fixed by MR #14201
closes #10449
Diffstat (limited to 'test/behavior')
| -rw-r--r-- | test/behavior/bitcast.zig | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/test/behavior/bitcast.zig b/test/behavior/bitcast.zig index 0c9e96c67e..f8a1928dd1 100644 --- a/test/behavior/bitcast.zig +++ b/test/behavior/bitcast.zig @@ -2,6 +2,7 @@ const std = @import("std"); const builtin = @import("builtin"); const expect = std.testing.expect; const expectEqual = std.testing.expectEqual; +const math = std.math; const maxInt = std.math.maxInt; const minInt = std.math.minInt; const native_endian = builtin.target.cpu.arch.endian(); @@ -383,10 +384,72 @@ test "comptime bitcast with fields following f80" { } test "bitcast vector to integer and back" { - if (true) return error.SkipZigTest; // TODO: https://github.com/ziglang/zig/issues/13220 + 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 const arr: [16]bool = [_]bool{ true, false } ++ [_]bool{true} ** 14; var x = @splat(16, true); x[1] = false; try expect(@bitCast(u16, x) == comptime @bitCast(u16, @as(@Vector(16, bool), arr))); } + +fn bitCastWrapper16(x: f16) u16 { + return @bitCast(u16, x); +} +fn bitCastWrapper32(x: f32) u32 { + return @bitCast(u32, x); +} +fn bitCastWrapper64(x: f64) u64 { + return @bitCast(u64, x); +} +fn bitCastWrapper128(x: f128) u128 { + return @bitCast(u128, x); +} +test "bitcast nan float does modify signaling bit" { + 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 + // TODO: https://github.com/ziglang/zig/issues/14366 + if (builtin.cpu.arch == .arm and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; + + // 16 bit + const snan_f16_const = math.nan_f16; + try expectEqual(math.nan_u16, @bitCast(u16, snan_f16_const)); + try expectEqual(math.nan_u16, bitCastWrapper16(snan_f16_const)); + + var snan_f16_var = math.nan_f16; + try expectEqual(math.nan_u16, @bitCast(u16, snan_f16_var)); + try expectEqual(math.nan_u16, bitCastWrapper16(snan_f16_var)); + + // 32 bit + const snan_f32_const = math.nan_f32; + try expectEqual(math.nan_u32, @bitCast(u32, snan_f32_const)); + try expectEqual(math.nan_u32, bitCastWrapper32(snan_f32_const)); + + var snan_f32_var = math.nan_f32; + try expectEqual(math.nan_u32, @bitCast(u32, snan_f32_var)); + try expectEqual(math.nan_u32, bitCastWrapper32(snan_f32_var)); + + // 64 bit + const snan_f64_const = math.nan_f64; + try expectEqual(math.nan_u64, @bitCast(u64, snan_f64_const)); + try expectEqual(math.nan_u64, bitCastWrapper64(snan_f64_const)); + + var snan_f64_var = math.nan_f64; + try expectEqual(math.nan_u64, @bitCast(u64, snan_f64_var)); + try expectEqual(math.nan_u64, bitCastWrapper64(snan_f64_var)); + + // 128 bit + const snan_f128_const = math.nan_f128; + try expectEqual(math.nan_u128, @bitCast(u128, snan_f128_const)); + try expectEqual(math.nan_u128, bitCastWrapper128(snan_f128_const)); + + var snan_f128_var = math.nan_f128; + try expectEqual(math.nan_u128, @bitCast(u128, snan_f128_var)); + try expectEqual(math.nan_u128, bitCastWrapper128(snan_f128_var)); +} |
