| ... | ... | @@ -2,6 +2,7 @@ const std = @import("std"); |
| 2 | 2 | const builtin = @import("builtin"); |
| 3 | 3 | const expect = std.testing.expect; |
| 4 | 4 | const expectEqual = std.testing.expectEqual; |
| 5 | const math = std.math; |
| 5 | 6 | const maxInt = std.math.maxInt; |
| 6 | 7 | const minInt = std.math.minInt; |
| 7 | 8 | const native_endian = builtin.target.cpu.arch.endian(); |
| ... | ... | @@ -383,10 +384,72 @@ test "comptime bitcast with fields following f80" { |
| 383 | 384 | } |
| 384 | 385 | |
| 385 | 386 | test "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 |
| 387 | 392 | |
| 388 | 393 | const arr: [16]bool = [_]bool{ true, false } ++ [_]bool{true} ** 14; |
| 389 | 394 | var x = @splat(16, true); |
| 390 | 395 | x[1] = false; |
| 391 | 396 | try expect(@bitCast(u16, x) == comptime @bitCast(u16, @as(@Vector(16, bool), arr))); |
| 392 | 397 | } |
| 398 | |
| 399 | fn bitCastWrapper16(x: f16) u16 { |
| 400 | return @bitCast(u16, x); |
| 401 | } |
| 402 | fn bitCastWrapper32(x: f32) u32 { |
| 403 | return @bitCast(u32, x); |
| 404 | } |
| 405 | fn bitCastWrapper64(x: f64) u64 { |
| 406 | return @bitCast(u64, x); |
| 407 | } |
| 408 | fn bitCastWrapper128(x: f128) u128 { |
| 409 | return @bitCast(u128, x); |
| 410 | } |
| 411 | test "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 | } |