| ... | ... | @@ -1,10 +1,27 @@ |
| 1 | const std = @import("std"); |
| 2 | const math = std.math; |
| 1 | 3 | const builtin = @import("builtin"); |
| 2 | 4 | const __extendhfsf2 = @import("extendhfsf2.zig").__extendhfsf2; |
| 3 | 5 | const __extendhftf2 = @import("extendhftf2.zig").__extendhftf2; |
| 4 | 6 | const __extendsftf2 = @import("extendsftf2.zig").__extendsftf2; |
| 5 | 7 | const __extenddftf2 = @import("extenddftf2.zig").__extenddftf2; |
| 8 | const __extenddfxf2 = @import("extenddfxf2.zig").__extenddfxf2; |
| 6 | 9 | const F16T = @import("./common.zig").F16T; |
| 7 | 10 | |
| 11 | fn test__extenddfxf2(a: f64, expected: u80) !void { |
| 12 | const x = __extenddfxf2(a); |
| 13 | |
| 14 | const rep = @bitCast(u80, x); |
| 15 | if (rep == expected) |
| 16 | return; |
| 17 | |
| 18 | // test other possible NaN representation(signal NaN) |
| 19 | if (math.isNan(@bitCast(f80, expected)) and math.isNan(x)) |
| 20 | return; |
| 21 | |
| 22 | @panic("__extenddfxf2 test failure"); |
| 23 | } |
| 24 | |
| 8 | 25 | fn test__extenddftf2(a: f64, expected_hi: u64, expected_lo: u64) !void { |
| 9 | 26 | const x = __extenddftf2(a); |
| 10 | 27 | |
| ... | ... | @@ -65,6 +82,33 @@ fn test__extendsftf2(a: f32, expected_hi: u64, expected_lo: u64) !void { |
| 65 | 82 | return error.TestFailure; |
| 66 | 83 | } |
| 67 | 84 | |
| 85 | test "extenddfxf2" { |
| 86 | // qNaN |
| 87 | try test__extenddfxf2(makeQNaN64(), 0x7fffc000000000000000); |
| 88 | |
| 89 | // NaN |
| 90 | try test__extenddfxf2(makeNaN64(0x7100000000000), 0x7fffe080000000000000); |
| 91 | // This is bad? |
| 92 | |
| 93 | // inf |
| 94 | try test__extenddfxf2(makeInf64(), 0x7fff8000000000000000); |
| 95 | |
| 96 | // zero |
| 97 | try test__extenddfxf2(0.0, 0x0); |
| 98 | |
| 99 | try test__extenddfxf2(0x0.a3456789abcdefp+6, 0x4004a3456789abcdf000); |
| 100 | |
| 101 | try test__extenddfxf2(0x0.edcba987654321fp-8, 0x3ff6edcba98765432000); |
| 102 | |
| 103 | try test__extenddfxf2(0x0.a3456789abcdefp+46, 0x402ca3456789abcdf000); |
| 104 | |
| 105 | try test__extenddfxf2(0x0.edcba987654321fp-44, 0x3fd2edcba98765432000); |
| 106 | |
| 107 | // subnormal |
| 108 | try test__extenddfxf2(0x1.8000000000001p-1022, 0x3c01c000000000000800); |
| 109 | try test__extenddfxf2(0x1.8000000000002p-1023, 0x3c00c000000000001000); |
| 110 | } |
| 111 | |
| 68 | 112 | test "extenddftf2" { |
| 69 | 113 | // qNaN |
| 70 | 114 | try test__extenddftf2(makeQNaN64(), 0x7fff800000000000, 0x0); |
| ... | ... | @@ -85,6 +129,10 @@ test "extenddftf2" { |
| 85 | 129 | try test__extenddftf2(0x1.23456789abcdefp+45, 0x402c23456789abcd, 0xf000000000000000); |
| 86 | 130 | |
| 87 | 131 | try test__extenddftf2(0x1.edcba987654321fp-45, 0x3fd2edcba9876543, 0x2000000000000000); |
| 132 | |
| 133 | // subnormal |
| 134 | try test__extenddftf2(0x1.8p-1022, 0x3c01800000000000, 0x0); |
| 135 | try test__extenddftf2(0x1.8p-1023, 0x3c00800000000000, 0x0); |
| 88 | 136 | } |
| 89 | 137 | |
| 90 | 138 | test "extendhfsf2" { |