mirror of
https://github.com/ziglang/zig.git
synced 2025-12-28 17:13:19 +00:00
* Generalise NaN handling and make std.math.nan() give quiet NaNs * Address uses of std.math.qnan_* and std.math.nan_* consts * Comment out failing test due to issues with signalling NaN * Fix issue in c_builtins.zig where we need qnan_u32
36 lines
1.5 KiB
Zig
36 lines
1.5 KiB
Zig
const std = @import("std");
|
|
const math = std.math;
|
|
const mem = std.mem;
|
|
const testing = std.testing;
|
|
|
|
const qnan_u16: u16 = 0x7E00;
|
|
const snan_u16: u16 = 0x7D00;
|
|
const qnan_u32: u32 = 0x7FC00000;
|
|
const snan_u32: u32 = 0x7FA00000;
|
|
const qnan_u64: u64 = 0x7FF8000000000000;
|
|
const snan_u64: u64 = 0x7FF4000000000000;
|
|
const qnan_u128: u128 = 0x7FFF8000000000000000000000000000;
|
|
const snan_u128: u128 = 0x7FFF4000000000000000000000000000;
|
|
const qnan_f16: f16 = math.nan(f16);
|
|
const snan_f16: f16 = math.snan(f16);
|
|
const qnan_f32: f32 = math.nan(f32);
|
|
const snan_f32: f32 = math.snan(f32);
|
|
const qnan_f64: f64 = math.nan(f64);
|
|
const snan_f64: f64 = math.snan(f64);
|
|
const qnan_f128: f128 = math.nan(f128);
|
|
const snan_f128: f128 = math.snan(f128);
|
|
|
|
test "nan memory equality" {
|
|
// signaled
|
|
try testing.expect(mem.eql(u8, mem.asBytes(&snan_u16), mem.asBytes(&snan_f16)));
|
|
try testing.expect(mem.eql(u8, mem.asBytes(&snan_u32), mem.asBytes(&snan_f32)));
|
|
try testing.expect(mem.eql(u8, mem.asBytes(&snan_u64), mem.asBytes(&snan_f64)));
|
|
try testing.expect(mem.eql(u8, mem.asBytes(&snan_u128), mem.asBytes(&snan_f128)));
|
|
|
|
// quiet
|
|
try testing.expect(mem.eql(u8, mem.asBytes(&qnan_u16), mem.asBytes(&qnan_f16)));
|
|
try testing.expect(mem.eql(u8, mem.asBytes(&qnan_u32), mem.asBytes(&qnan_f32)));
|
|
try testing.expect(mem.eql(u8, mem.asBytes(&qnan_u64), mem.asBytes(&qnan_f64)));
|
|
try testing.expect(mem.eql(u8, mem.asBytes(&qnan_u128), mem.asBytes(&qnan_f128)));
|
|
}
|