master
 1const builtin = @import("builtin");
 2const std = @import("std");
 3const math = std.math;
 4const mem = std.mem;
 5const testing = std.testing;
 6
 7const qnan_u16: u16 = 0x7E00;
 8const snan_u16: u16 = 0x7D00;
 9const qnan_u32: u32 = 0x7FC00000;
10const snan_u32: u32 = 0x7FA00000;
11const qnan_u64: u64 = 0x7FF8000000000000;
12const snan_u64: u64 = 0x7FF4000000000000;
13const qnan_u128: u128 = 0x7FFF8000000000000000000000000000;
14const snan_u128: u128 = 0x7FFF4000000000000000000000000000;
15const qnan_f16: f16 = math.nan(f16);
16const snan_f16: f16 = math.snan(f16);
17const qnan_f32: f32 = math.nan(f32);
18const snan_f32: f32 = math.snan(f32);
19const qnan_f64: f64 = math.nan(f64);
20const snan_f64: f64 = math.snan(f64);
21const qnan_f128: f128 = math.nan(f128);
22const snan_f128: f128 = math.snan(f128);
23
24test "nan memory equality" {
25    if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
26    if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
27    if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
28
29    // signaled
30    try testing.expect(mem.eql(u8, mem.asBytes(&snan_u16), mem.asBytes(&snan_f16)));
31    try testing.expect(mem.eql(u8, mem.asBytes(&snan_u32), mem.asBytes(&snan_f32)));
32    try testing.expect(mem.eql(u8, mem.asBytes(&snan_u64), mem.asBytes(&snan_f64)));
33    try testing.expect(mem.eql(u8, mem.asBytes(&snan_u128), mem.asBytes(&snan_f128)));
34
35    // quiet
36    try testing.expect(mem.eql(u8, mem.asBytes(&qnan_u16), mem.asBytes(&qnan_f16)));
37    try testing.expect(mem.eql(u8, mem.asBytes(&qnan_u32), mem.asBytes(&qnan_f32)));
38    try testing.expect(mem.eql(u8, mem.asBytes(&qnan_u64), mem.asBytes(&qnan_f64)));
39    try testing.expect(mem.eql(u8, mem.asBytes(&qnan_u128), mem.asBytes(&qnan_f128)));
40}