authorgravatar for hardy7cc@gmail.comHardy <hardy7cc@gmail.com> 2023-01-11 23:15:34+01:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-01-20 16:42:24+02:00
log37fe41792c72f98657e5c51caa5bfd9ded7eb409
treefe0c69e28fcc4c34f87296f03a0de3a50cfaa9c0
parentfe6dcdba1407f00584725318404814571cdbd828

added test for bitcast signaled nan float

This was fixed by MR #14201 closes #10449

1 files changed, 64 insertions(+), 1 deletions(-)

test/behavior/bitcast.zig+64-1
......@@ -2,6 +2,7 @@ const std = @import("std");
22const builtin = @import("builtin");
33const expect = std.testing.expect;
44const expectEqual = std.testing.expectEqual;
5const math = std.math;
56const maxInt = std.math.maxInt;
67const minInt = std.math.minInt;
78const native_endian = builtin.target.cpu.arch.endian();
......@@ -383,10 +384,72 @@ test "comptime bitcast with fields following f80" {
383384}
384385
385386test "bitcast vector to integer and back" {
386 if (true) return error.SkipZigTest; // TODO: https://github.com/ziglang/zig/issues/13220
387 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
388 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
389 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
390 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
391 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
387392
388393 const arr: [16]bool = [_]bool{ true, false } ++ [_]bool{true} ** 14;
389394 var x = @splat(16, true);
390395 x[1] = false;
391396 try expect(@bitCast(u16, x) == comptime @bitCast(u16, @as(@Vector(16, bool), arr)));
392397}
398
399fn bitCastWrapper16(x: f16) u16 {
400 return @bitCast(u16, x);
401}
402fn bitCastWrapper32(x: f32) u32 {
403 return @bitCast(u32, x);
404}
405fn bitCastWrapper64(x: f64) u64 {
406 return @bitCast(u64, x);
407}
408fn bitCastWrapper128(x: f128) u128 {
409 return @bitCast(u128, x);
410}
411test "bitcast nan float does modify signaling bit" {
412 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
413 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
414 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
415 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
416 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
417 // TODO: https://github.com/ziglang/zig/issues/14366
418 if (builtin.cpu.arch == .arm and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
419
420 // 16 bit
421 const snan_f16_const = math.nan_f16;
422 try expectEqual(math.nan_u16, @bitCast(u16, snan_f16_const));
423 try expectEqual(math.nan_u16, bitCastWrapper16(snan_f16_const));
424
425 var snan_f16_var = math.nan_f16;
426 try expectEqual(math.nan_u16, @bitCast(u16, snan_f16_var));
427 try expectEqual(math.nan_u16, bitCastWrapper16(snan_f16_var));
428
429 // 32 bit
430 const snan_f32_const = math.nan_f32;
431 try expectEqual(math.nan_u32, @bitCast(u32, snan_f32_const));
432 try expectEqual(math.nan_u32, bitCastWrapper32(snan_f32_const));
433
434 var snan_f32_var = math.nan_f32;
435 try expectEqual(math.nan_u32, @bitCast(u32, snan_f32_var));
436 try expectEqual(math.nan_u32, bitCastWrapper32(snan_f32_var));
437
438 // 64 bit
439 const snan_f64_const = math.nan_f64;
440 try expectEqual(math.nan_u64, @bitCast(u64, snan_f64_const));
441 try expectEqual(math.nan_u64, bitCastWrapper64(snan_f64_const));
442
443 var snan_f64_var = math.nan_f64;
444 try expectEqual(math.nan_u64, @bitCast(u64, snan_f64_var));
445 try expectEqual(math.nan_u64, bitCastWrapper64(snan_f64_var));
446
447 // 128 bit
448 const snan_f128_const = math.nan_f128;
449 try expectEqual(math.nan_u128, @bitCast(u128, snan_f128_const));
450 try expectEqual(math.nan_u128, bitCastWrapper128(snan_f128_const));
451
452 var snan_f128_var = math.nan_f128;
453 try expectEqual(math.nan_u128, @bitCast(u128, snan_f128_var));
454 try expectEqual(math.nan_u128, bitCastWrapper128(snan_f128_var));
455}