zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

int_from_float_test.zig (38802B) - Raw


      1 const std = @import("std");
      2 const testing = std.testing;
      3 const math = std.math;
      4 
      5 const __fixunshfti = @import("fixunshfti.zig").__fixunshfti;
      6 const __fixunsxfti = @import("fixunsxfti.zig").__fixunsxfti;
      7 
      8 // Conversion from f32
      9 const __fixsfsi = @import("fixsfsi.zig").__fixsfsi;
     10 const __fixunssfsi = @import("fixunssfsi.zig").__fixunssfsi;
     11 const __fixsfdi = @import("fixsfdi.zig").__fixsfdi;
     12 const __fixunssfdi = @import("fixunssfdi.zig").__fixunssfdi;
     13 const __fixsfti = @import("fixsfti.zig").__fixsfti;
     14 const __fixunssfti = @import("fixunssfti.zig").__fixunssfti;
     15 const __fixsfei = @import("fixsfei.zig").__fixsfei;
     16 const __fixunssfei = @import("fixunssfei.zig").__fixunssfei;
     17 
     18 // Conversion from f64
     19 const __fixdfsi = @import("fixdfsi.zig").__fixdfsi;
     20 const __fixunsdfsi = @import("fixunsdfsi.zig").__fixunsdfsi;
     21 const __fixdfdi = @import("fixdfdi.zig").__fixdfdi;
     22 const __fixunsdfdi = @import("fixunsdfdi.zig").__fixunsdfdi;
     23 const __fixdfti = @import("fixdfti.zig").__fixdfti;
     24 const __fixunsdfti = @import("fixunsdfti.zig").__fixunsdfti;
     25 const __fixdfei = @import("fixdfei.zig").__fixdfei;
     26 const __fixunsdfei = @import("fixunsdfei.zig").__fixunsdfei;
     27 
     28 // Conversion from f128
     29 const __fixtfsi = @import("fixtfsi.zig").__fixtfsi;
     30 const __fixunstfsi = @import("fixunstfsi.zig").__fixunstfsi;
     31 const __fixtfdi = @import("fixtfdi.zig").__fixtfdi;
     32 const __fixunstfdi = @import("fixunstfdi.zig").__fixunstfdi;
     33 const __fixtfti = @import("fixtfti.zig").__fixtfti;
     34 const __fixunstfti = @import("fixunstfti.zig").__fixunstfti;
     35 
     36 fn test__fixsfsi(a: f32, expected: i32) !void {
     37     const x = __fixsfsi(a);
     38     try testing.expect(x == expected);
     39 }
     40 
     41 fn test__fixunssfsi(a: f32, expected: u32) !void {
     42     const x = __fixunssfsi(a);
     43     try testing.expect(x == expected);
     44 }
     45 
     46 test "fixsfsi" {
     47     try test__fixsfsi(-math.floatMax(f32), math.minInt(i32));
     48 
     49     try test__fixsfsi(-0x1.FFFFFFFFFFFFFp+1023, math.minInt(i32));
     50     try test__fixsfsi(-0x1.FFFFFFFFFFFFFp+1023, -0x80000000);
     51 
     52     try test__fixsfsi(-0x1.0000000000000p+127, -0x80000000);
     53     try test__fixsfsi(-0x1.FFFFFFFFFFFFFp+126, -0x80000000);
     54     try test__fixsfsi(-0x1.FFFFFFFFFFFFEp+126, -0x80000000);
     55 
     56     try test__fixsfsi(-0x1.0000000000001p+63, -0x80000000);
     57     try test__fixsfsi(-0x1.0000000000000p+63, -0x80000000);
     58     try test__fixsfsi(-0x1.FFFFFFFFFFFFFp+62, -0x80000000);
     59     try test__fixsfsi(-0x1.FFFFFFFFFFFFEp+62, -0x80000000);
     60 
     61     try test__fixsfsi(-0x1.FFFFFEp+62, -0x80000000);
     62     try test__fixsfsi(-0x1.FFFFFCp+62, -0x80000000);
     63 
     64     try test__fixsfsi(-0x1.000000p+31, -0x80000000);
     65     try test__fixsfsi(-0x1.FFFFFFp+30, -0x80000000);
     66     try test__fixsfsi(-0x1.FFFFFEp+30, -0x7FFFFF80);
     67     try test__fixsfsi(-0x1.FFFFFCp+30, -0x7FFFFF00);
     68 
     69     try test__fixsfsi(-2.01, -2);
     70     try test__fixsfsi(-2.0, -2);
     71     try test__fixsfsi(-1.99, -1);
     72     try test__fixsfsi(-1.0, -1);
     73     try test__fixsfsi(-0.99, 0);
     74     try test__fixsfsi(-0.5, 0);
     75 
     76     try test__fixsfsi(-math.floatMin(f32), 0);
     77     try test__fixsfsi(0.0, 0);
     78     try test__fixsfsi(math.floatMin(f32), 0);
     79     try test__fixsfsi(0.5, 0);
     80     try test__fixsfsi(0.99, 0);
     81     try test__fixsfsi(1.0, 1);
     82     try test__fixsfsi(1.5, 1);
     83     try test__fixsfsi(1.99, 1);
     84     try test__fixsfsi(2.0, 2);
     85     try test__fixsfsi(2.01, 2);
     86 
     87     try test__fixsfsi(0x1.FFFFFCp+30, 0x7FFFFF00);
     88     try test__fixsfsi(0x1.FFFFFEp+30, 0x7FFFFF80);
     89     try test__fixsfsi(0x1.FFFFFFp+30, 0x7FFFFFFF);
     90     try test__fixsfsi(0x1.000000p+31, 0x7FFFFFFF);
     91 
     92     try test__fixsfsi(0x1.FFFFFCp+62, 0x7FFFFFFF);
     93     try test__fixsfsi(0x1.FFFFFEp+62, 0x7FFFFFFF);
     94 
     95     try test__fixsfsi(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFF);
     96     try test__fixsfsi(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFF);
     97     try test__fixsfsi(0x1.0000000000000p+63, 0x7FFFFFFF);
     98     try test__fixsfsi(0x1.0000000000001p+63, 0x7FFFFFFF);
     99 
    100     try test__fixsfsi(0x1.FFFFFFFFFFFFEp+126, 0x7FFFFFFF);
    101     try test__fixsfsi(0x1.FFFFFFFFFFFFFp+126, 0x7FFFFFFF);
    102     try test__fixsfsi(0x1.0000000000000p+127, 0x7FFFFFFF);
    103 
    104     try test__fixsfsi(0x1.FFFFFFFFFFFFFp+1023, 0x7FFFFFFF);
    105     try test__fixsfsi(0x1.FFFFFFFFFFFFFp+1023, math.maxInt(i32));
    106 
    107     try test__fixsfsi(math.floatMax(f32), math.maxInt(i32));
    108 }
    109 
    110 test "fixunssfsi" {
    111     try test__fixunssfsi(0.0, 0);
    112 
    113     try test__fixunssfsi(0.5, 0);
    114     try test__fixunssfsi(0.99, 0);
    115     try test__fixunssfsi(1.0, 1);
    116     try test__fixunssfsi(1.5, 1);
    117     try test__fixunssfsi(1.99, 1);
    118     try test__fixunssfsi(2.0, 2);
    119     try test__fixunssfsi(2.01, 2);
    120     try test__fixunssfsi(-0.5, 0);
    121     try test__fixunssfsi(-0.99, 0);
    122 
    123     try test__fixunssfsi(-1.0, 0);
    124     try test__fixunssfsi(-1.5, 0);
    125     try test__fixunssfsi(-1.99, 0);
    126     try test__fixunssfsi(-2.0, 0);
    127     try test__fixunssfsi(-2.01, 0);
    128 
    129     try test__fixunssfsi(0x1.000000p+31, 0x80000000);
    130     try test__fixunssfsi(0x1.000000p+32, 0xFFFFFFFF);
    131     try test__fixunssfsi(0x1.FFFFFEp+31, 0xFFFFFF00);
    132     try test__fixunssfsi(0x1.FFFFFEp+30, 0x7FFFFF80);
    133     try test__fixunssfsi(0x1.FFFFFCp+30, 0x7FFFFF00);
    134 
    135     try test__fixunssfsi(-0x1.FFFFFEp+30, 0);
    136     try test__fixunssfsi(-0x1.FFFFFCp+30, 0);
    137 }
    138 
    139 fn test__fixsfdi(a: f32, expected: i64) !void {
    140     const x = __fixsfdi(a);
    141     try testing.expect(x == expected);
    142 }
    143 
    144 fn test__fixunssfdi(a: f32, expected: u64) !void {
    145     const x = __fixunssfdi(a);
    146     try testing.expect(x == expected);
    147 }
    148 
    149 test "fixsfdi" {
    150     try test__fixsfdi(-math.floatMax(f32), math.minInt(i64));
    151 
    152     try test__fixsfdi(-0x1.FFFFFFFFFFFFFp+1023, math.minInt(i64));
    153     try test__fixsfdi(-0x1.FFFFFFFFFFFFFp+1023, -0x8000000000000000);
    154 
    155     try test__fixsfdi(-0x1.0000000000000p+127, -0x8000000000000000);
    156     try test__fixsfdi(-0x1.FFFFFFFFFFFFFp+126, -0x8000000000000000);
    157     try test__fixsfdi(-0x1.FFFFFFFFFFFFEp+126, -0x8000000000000000);
    158 
    159     try test__fixsfdi(-0x1.0000000000001p+63, -0x8000000000000000);
    160     try test__fixsfdi(-0x1.0000000000000p+63, -0x8000000000000000);
    161     try test__fixsfdi(-0x1.FFFFFFFFFFFFFp+62, -0x8000000000000000);
    162     try test__fixsfdi(-0x1.FFFFFFFFFFFFEp+62, -0x8000000000000000);
    163 
    164     try test__fixsfdi(-0x1.FFFFFFp+62, -0x8000000000000000);
    165     try test__fixsfdi(-0x1.FFFFFEp+62, -0x7fffff8000000000);
    166     try test__fixsfdi(-0x1.FFFFFCp+62, -0x7fffff0000000000);
    167 
    168     try test__fixsfdi(-2.01, -2);
    169     try test__fixsfdi(-2.0, -2);
    170     try test__fixsfdi(-1.99, -1);
    171     try test__fixsfdi(-1.0, -1);
    172     try test__fixsfdi(-0.99, 0);
    173     try test__fixsfdi(-0.5, 0);
    174     try test__fixsfdi(-math.floatMin(f32), 0);
    175     try test__fixsfdi(0.0, 0);
    176     try test__fixsfdi(math.floatMin(f32), 0);
    177     try test__fixsfdi(0.5, 0);
    178     try test__fixsfdi(0.99, 0);
    179     try test__fixsfdi(1.0, 1);
    180     try test__fixsfdi(1.5, 1);
    181     try test__fixsfdi(1.99, 1);
    182     try test__fixsfdi(2.0, 2);
    183     try test__fixsfdi(2.01, 2);
    184 
    185     try test__fixsfdi(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    186     try test__fixsfdi(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    187     try test__fixsfdi(0x1.FFFFFFp+62, 0x7FFFFFFFFFFFFFFF);
    188 
    189     try test__fixsfdi(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFFFFFFFFFF);
    190     try test__fixsfdi(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFFFFFFFFFF);
    191     try test__fixsfdi(0x1.0000000000000p+63, 0x7FFFFFFFFFFFFFFF);
    192     try test__fixsfdi(0x1.0000000000001p+63, 0x7FFFFFFFFFFFFFFF);
    193 
    194     try test__fixsfdi(0x1.FFFFFFFFFFFFEp+126, 0x7FFFFFFFFFFFFFFF);
    195     try test__fixsfdi(0x1.FFFFFFFFFFFFFp+126, 0x7FFFFFFFFFFFFFFF);
    196     try test__fixsfdi(0x1.0000000000000p+127, 0x7FFFFFFFFFFFFFFF);
    197 
    198     try test__fixsfdi(0x1.FFFFFFFFFFFFFp+1023, 0x7FFFFFFFFFFFFFFF);
    199     try test__fixsfdi(0x1.FFFFFFFFFFFFFp+1023, math.maxInt(i64));
    200 
    201     try test__fixsfdi(math.floatMax(f32), math.maxInt(i64));
    202 }
    203 
    204 test "fixunssfdi" {
    205     try test__fixunssfdi(0.0, 0);
    206 
    207     try test__fixunssfdi(0.5, 0);
    208     try test__fixunssfdi(0.99, 0);
    209     try test__fixunssfdi(1.0, 1);
    210     try test__fixunssfdi(1.5, 1);
    211     try test__fixunssfdi(1.99, 1);
    212     try test__fixunssfdi(2.0, 2);
    213     try test__fixunssfdi(2.01, 2);
    214     try test__fixunssfdi(-0.5, 0);
    215     try test__fixunssfdi(-0.99, 0);
    216 
    217     try test__fixunssfdi(-1.0, 0);
    218     try test__fixunssfdi(-1.5, 0);
    219     try test__fixunssfdi(-1.99, 0);
    220     try test__fixunssfdi(-2.0, 0);
    221     try test__fixunssfdi(-2.01, 0);
    222 
    223     try test__fixunssfdi(0x1.FFFFFEp+63, 0xFFFFFF0000000000);
    224     try test__fixunssfdi(0x1.000000p+63, 0x8000000000000000);
    225     try test__fixunssfdi(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    226     try test__fixunssfdi(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    227 
    228     try test__fixunssfdi(-0x1.FFFFFEp+62, 0x0000000000000000);
    229     try test__fixunssfdi(-0x1.FFFFFCp+62, 0x0000000000000000);
    230 }
    231 
    232 fn test__fixsfti(a: f32, expected: i128) !void {
    233     const x = __fixsfti(a);
    234     try testing.expect(x == expected);
    235 }
    236 
    237 fn test__fixunssfti(a: f32, expected: u128) !void {
    238     const x = __fixunssfti(a);
    239     try testing.expect(x == expected);
    240 }
    241 
    242 test "fixsfti" {
    243     try test__fixsfti(-math.floatMax(f32), math.minInt(i128));
    244 
    245     try test__fixsfti(-0x1.FFFFFFFFFFFFFp+1023, math.minInt(i128));
    246     try test__fixsfti(-0x1.FFFFFFFFFFFFFp+1023, -0x80000000000000000000000000000000);
    247 
    248     try test__fixsfti(-0x1.0000000000000p+127, -0x80000000000000000000000000000000);
    249     try test__fixsfti(-0x1.FFFFFFFFFFFFFp+126, -0x80000000000000000000000000000000);
    250     try test__fixsfti(-0x1.FFFFFFFFFFFFEp+126, -0x80000000000000000000000000000000);
    251     try test__fixsfti(-0x1.FFFFFF0000000p+126, -0x80000000000000000000000000000000);
    252     try test__fixsfti(-0x1.FFFFFE0000000p+126, -0x7FFFFF80000000000000000000000000);
    253     try test__fixsfti(-0x1.FFFFFC0000000p+126, -0x7FFFFF00000000000000000000000000);
    254 
    255     try test__fixsfti(-0x1.0000000000001p+63, -0x8000000000000000);
    256     try test__fixsfti(-0x1.0000000000000p+63, -0x8000000000000000);
    257     try test__fixsfti(-0x1.FFFFFFFFFFFFFp+62, -0x8000000000000000);
    258     try test__fixsfti(-0x1.FFFFFFFFFFFFEp+62, -0x8000000000000000);
    259 
    260     try test__fixsfti(-0x1.FFFFFFp+62, -0x8000000000000000);
    261     try test__fixsfti(-0x1.FFFFFEp+62, -0x7fffff8000000000);
    262     try test__fixsfti(-0x1.FFFFFCp+62, -0x7fffff0000000000);
    263 
    264     try test__fixsfti(-0x1.000000p+31, -0x80000000);
    265     try test__fixsfti(-0x1.FFFFFFp+30, -0x80000000);
    266     try test__fixsfti(-0x1.FFFFFEp+30, -0x7FFFFF80);
    267     try test__fixsfti(-0x1.FFFFFCp+30, -0x7FFFFF00);
    268 
    269     try test__fixsfti(-2.01, -2);
    270     try test__fixsfti(-2.0, -2);
    271     try test__fixsfti(-1.99, -1);
    272     try test__fixsfti(-1.0, -1);
    273     try test__fixsfti(-0.99, 0);
    274     try test__fixsfti(-0.5, 0);
    275     try test__fixsfti(-math.floatMin(f32), 0);
    276     try test__fixsfti(0.0, 0);
    277     try test__fixsfti(math.floatMin(f32), 0);
    278     try test__fixsfti(0.5, 0);
    279     try test__fixsfti(0.99, 0);
    280     try test__fixsfti(1.0, 1);
    281     try test__fixsfti(1.5, 1);
    282     try test__fixsfti(1.99, 1);
    283     try test__fixsfti(2.0, 2);
    284     try test__fixsfti(2.01, 2);
    285 
    286     try test__fixsfti(0x1.FFFFFCp+30, 0x7FFFFF00);
    287     try test__fixsfti(0x1.FFFFFEp+30, 0x7FFFFF80);
    288     try test__fixsfti(0x1.FFFFFFp+30, 0x80000000);
    289     try test__fixsfti(0x1.000000p+31, 0x80000000);
    290 
    291     try test__fixsfti(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    292     try test__fixsfti(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    293     try test__fixsfti(0x1.FFFFFFp+62, 0x8000000000000000);
    294 
    295     try test__fixsfti(0x1.FFFFFFFFFFFFEp+62, 0x8000000000000000);
    296     try test__fixsfti(0x1.FFFFFFFFFFFFFp+62, 0x8000000000000000);
    297     try test__fixsfti(0x1.0000000000000p+63, 0x8000000000000000);
    298     try test__fixsfti(0x1.0000000000001p+63, 0x8000000000000000);
    299 
    300     try test__fixsfti(0x1.FFFFFC0000000p+126, 0x7FFFFF00000000000000000000000000);
    301     try test__fixsfti(0x1.FFFFFE0000000p+126, 0x7FFFFF80000000000000000000000000);
    302     try test__fixsfti(0x1.FFFFFF0000000p+126, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    303     try test__fixsfti(0x1.FFFFFFFFFFFFEp+126, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    304     try test__fixsfti(0x1.FFFFFFFFFFFFFp+126, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    305     try test__fixsfti(0x1.0000000000000p+127, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    306 
    307     try test__fixsfti(0x1.FFFFFFFFFFFFFp+1023, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    308     try test__fixsfti(0x1.FFFFFFFFFFFFFp+1023, math.maxInt(i128));
    309 
    310     try test__fixsfti(math.floatMax(f32), math.maxInt(i128));
    311 }
    312 
    313 test "fixunssfti" {
    314     try test__fixunssfti(0.0, 0);
    315 
    316     try test__fixunssfti(0.5, 0);
    317     try test__fixunssfti(0.99, 0);
    318     try test__fixunssfti(1.0, 1);
    319     try test__fixunssfti(1.5, 1);
    320     try test__fixunssfti(1.99, 1);
    321     try test__fixunssfti(2.0, 2);
    322     try test__fixunssfti(2.01, 2);
    323     try test__fixunssfti(-0.5, 0);
    324     try test__fixunssfti(-0.99, 0);
    325 
    326     try test__fixunssfti(-1.0, 0);
    327     try test__fixunssfti(-1.5, 0);
    328     try test__fixunssfti(-1.99, 0);
    329     try test__fixunssfti(-2.0, 0);
    330     try test__fixunssfti(-2.01, 0);
    331 
    332     try test__fixunssfti(0x1.FFFFFEp+63, 0xFFFFFF0000000000);
    333     try test__fixunssfti(0x1.000000p+63, 0x8000000000000000);
    334     try test__fixunssfti(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    335     try test__fixunssfti(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    336     try test__fixunssfti(0x1.FFFFFEp+127, 0xFFFFFF00000000000000000000000000);
    337     try test__fixunssfti(0x1.000000p+127, 0x80000000000000000000000000000000);
    338     try test__fixunssfti(0x1.FFFFFEp+126, 0x7FFFFF80000000000000000000000000);
    339     try test__fixunssfti(0x1.FFFFFCp+126, 0x7FFFFF00000000000000000000000000);
    340 
    341     try test__fixunssfti(-0x1.FFFFFEp+62, 0x0000000000000000);
    342     try test__fixunssfti(-0x1.FFFFFCp+62, 0x0000000000000000);
    343     try test__fixunssfti(-0x1.FFFFFEp+126, 0x0000000000000000);
    344     try test__fixunssfti(-0x1.FFFFFCp+126, 0x0000000000000000);
    345     try test__fixunssfti(math.floatMax(f32), 0xffffff00000000000000000000000000);
    346     try test__fixunssfti(math.inf(f32), math.maxInt(u128));
    347 }
    348 
    349 fn test_fixsfei(comptime T: type, expected: T, a: f32) !void {
    350     const int = @typeInfo(T).int;
    351     var actual: T = undefined;
    352     _ = switch (int.signedness) {
    353         .signed => __fixsfei,
    354         .unsigned => __fixunssfei,
    355     }(@ptrCast(&actual), int.bits, a);
    356     try testing.expect(expected == actual);
    357 }
    358 
    359 test "fixsfei" {
    360     try test_fixsfei(i256, -1 << 127, -0x1p127);
    361     try test_fixsfei(i256, -1 << 100, -0x1p100);
    362     try test_fixsfei(i256, -1 << 50, -0x1p50);
    363     try test_fixsfei(i256, -1 << 1, -0x1p1);
    364     try test_fixsfei(i256, -1 << 0, -0x1p0);
    365     try test_fixsfei(i256, 0, 0);
    366     try test_fixsfei(i256, 1 << 0, 0x1p0);
    367     try test_fixsfei(i256, 1 << 1, 0x1p1);
    368     try test_fixsfei(i256, 1 << 50, 0x1p50);
    369     try test_fixsfei(i256, 1 << 100, 0x1p100);
    370     try test_fixsfei(i256, 1 << 127, 0x1p127);
    371 }
    372 
    373 test "fixunsfei" {
    374     try test_fixsfei(u256, 0, 0);
    375     try test_fixsfei(u256, 1 << 0, 0x1p0);
    376     try test_fixsfei(u256, 1 << 1, 0x1p1);
    377     try test_fixsfei(u256, 1 << 50, 0x1p50);
    378     try test_fixsfei(u256, 1 << 100, 0x1p100);
    379     try test_fixsfei(u256, 1 << 127, 0x1p127);
    380 }
    381 
    382 fn test__fixdfsi(a: f64, expected: i32) !void {
    383     const x = __fixdfsi(a);
    384     try testing.expect(x == expected);
    385 }
    386 
    387 fn test__fixunsdfsi(a: f64, expected: u32) !void {
    388     const x = __fixunsdfsi(a);
    389     try testing.expect(x == expected);
    390 }
    391 
    392 test "fixdfsi" {
    393     try test__fixdfsi(-math.floatMax(f64), math.minInt(i32));
    394 
    395     try test__fixdfsi(-0x1.FFFFFFFFFFFFFp+1023, math.minInt(i32));
    396     try test__fixdfsi(-0x1.FFFFFFFFFFFFFp+1023, -0x80000000);
    397 
    398     try test__fixdfsi(-0x1.0000000000000p+127, -0x80000000);
    399     try test__fixdfsi(-0x1.FFFFFFFFFFFFFp+126, -0x80000000);
    400     try test__fixdfsi(-0x1.FFFFFFFFFFFFEp+126, -0x80000000);
    401 
    402     try test__fixdfsi(-0x1.0000000000001p+63, -0x80000000);
    403     try test__fixdfsi(-0x1.0000000000000p+63, -0x80000000);
    404     try test__fixdfsi(-0x1.FFFFFFFFFFFFFp+62, -0x80000000);
    405     try test__fixdfsi(-0x1.FFFFFFFFFFFFEp+62, -0x80000000);
    406 
    407     try test__fixdfsi(-0x1.FFFFFEp+62, -0x80000000);
    408     try test__fixdfsi(-0x1.FFFFFCp+62, -0x80000000);
    409 
    410     try test__fixdfsi(-0x1.000000p+31, -0x80000000);
    411     try test__fixdfsi(-0x1.FFFFFFp+30, -0x7FFFFFC0);
    412     try test__fixdfsi(-0x1.FFFFFEp+30, -0x7FFFFF80);
    413 
    414     try test__fixdfsi(-2.01, -2);
    415     try test__fixdfsi(-2.0, -2);
    416     try test__fixdfsi(-1.99, -1);
    417     try test__fixdfsi(-1.0, -1);
    418     try test__fixdfsi(-0.99, 0);
    419     try test__fixdfsi(-0.5, 0);
    420     try test__fixdfsi(-math.floatMin(f64), 0);
    421     try test__fixdfsi(0.0, 0);
    422     try test__fixdfsi(math.floatMin(f64), 0);
    423     try test__fixdfsi(0.5, 0);
    424     try test__fixdfsi(0.99, 0);
    425     try test__fixdfsi(1.0, 1);
    426     try test__fixdfsi(1.5, 1);
    427     try test__fixdfsi(1.99, 1);
    428     try test__fixdfsi(2.0, 2);
    429     try test__fixdfsi(2.01, 2);
    430 
    431     try test__fixdfsi(0x1.FFFFFEp+30, 0x7FFFFF80);
    432     try test__fixdfsi(0x1.FFFFFFp+30, 0x7FFFFFC0);
    433     try test__fixdfsi(0x1.000000p+31, 0x7FFFFFFF);
    434 
    435     try test__fixdfsi(0x1.FFFFFCp+62, 0x7FFFFFFF);
    436     try test__fixdfsi(0x1.FFFFFEp+62, 0x7FFFFFFF);
    437 
    438     try test__fixdfsi(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFF);
    439     try test__fixdfsi(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFF);
    440     try test__fixdfsi(0x1.0000000000000p+63, 0x7FFFFFFF);
    441     try test__fixdfsi(0x1.0000000000001p+63, 0x7FFFFFFF);
    442 
    443     try test__fixdfsi(0x1.FFFFFFFFFFFFEp+126, 0x7FFFFFFF);
    444     try test__fixdfsi(0x1.FFFFFFFFFFFFFp+126, 0x7FFFFFFF);
    445     try test__fixdfsi(0x1.0000000000000p+127, 0x7FFFFFFF);
    446 
    447     try test__fixdfsi(0x1.FFFFFFFFFFFFFp+1023, 0x7FFFFFFF);
    448     try test__fixdfsi(0x1.FFFFFFFFFFFFFp+1023, math.maxInt(i32));
    449 
    450     try test__fixdfsi(math.floatMax(f64), math.maxInt(i32));
    451 }
    452 
    453 test "fixunsdfsi" {
    454     try test__fixunsdfsi(0.0, 0);
    455 
    456     try test__fixunsdfsi(0.5, 0);
    457     try test__fixunsdfsi(0.99, 0);
    458     try test__fixunsdfsi(1.0, 1);
    459     try test__fixunsdfsi(1.5, 1);
    460     try test__fixunsdfsi(1.99, 1);
    461     try test__fixunsdfsi(2.0, 2);
    462     try test__fixunsdfsi(2.01, 2);
    463     try test__fixunsdfsi(-0.5, 0);
    464     try test__fixunsdfsi(-0.99, 0);
    465     try test__fixunsdfsi(-1.0, 0);
    466     try test__fixunsdfsi(-1.5, 0);
    467     try test__fixunsdfsi(-1.99, 0);
    468     try test__fixunsdfsi(-2.0, 0);
    469     try test__fixunsdfsi(-2.01, 0);
    470 
    471     try test__fixunsdfsi(0x1.000000p+31, 0x80000000);
    472     try test__fixunsdfsi(0x1.000000p+32, 0xFFFFFFFF);
    473     try test__fixunsdfsi(0x1.FFFFFEp+31, 0xFFFFFF00);
    474     try test__fixunsdfsi(0x1.FFFFFEp+30, 0x7FFFFF80);
    475     try test__fixunsdfsi(0x1.FFFFFCp+30, 0x7FFFFF00);
    476 
    477     try test__fixunsdfsi(-0x1.FFFFFEp+30, 0);
    478     try test__fixunsdfsi(-0x1.FFFFFCp+30, 0);
    479 
    480     try test__fixunsdfsi(0x1.FFFFFFFEp+31, 0xFFFFFFFF);
    481     try test__fixunsdfsi(0x1.FFFFFFFC00000p+30, 0x7FFFFFFF);
    482     try test__fixunsdfsi(0x1.FFFFFFF800000p+30, 0x7FFFFFFE);
    483 }
    484 
    485 fn test__fixdfdi(a: f64, expected: i64) !void {
    486     const x = __fixdfdi(a);
    487     try testing.expect(x == expected);
    488 }
    489 
    490 fn test__fixunsdfdi(a: f64, expected: u64) !void {
    491     const x = __fixunsdfdi(a);
    492     try testing.expect(x == expected);
    493 }
    494 
    495 test "fixdfdi" {
    496     try test__fixdfdi(-math.floatMax(f64), math.minInt(i64));
    497 
    498     try test__fixdfdi(-0x1.FFFFFFFFFFFFFp+1023, math.minInt(i64));
    499     try test__fixdfdi(-0x1.FFFFFFFFFFFFFp+1023, -0x8000000000000000);
    500 
    501     try test__fixdfdi(-0x1.0000000000000p+127, -0x8000000000000000);
    502     try test__fixdfdi(-0x1.FFFFFFFFFFFFFp+126, -0x8000000000000000);
    503     try test__fixdfdi(-0x1.FFFFFFFFFFFFEp+126, -0x8000000000000000);
    504 
    505     try test__fixdfdi(-0x1.0000000000001p+63, -0x8000000000000000);
    506     try test__fixdfdi(-0x1.0000000000000p+63, -0x8000000000000000);
    507     try test__fixdfdi(-0x1.FFFFFFFFFFFFFp+62, -0x7FFFFFFFFFFFFC00);
    508     try test__fixdfdi(-0x1.FFFFFFFFFFFFEp+62, -0x7FFFFFFFFFFFF800);
    509 
    510     try test__fixdfdi(-0x1.FFFFFEp+62, -0x7fffff8000000000);
    511     try test__fixdfdi(-0x1.FFFFFCp+62, -0x7fffff0000000000);
    512 
    513     try test__fixdfdi(-2.01, -2);
    514     try test__fixdfdi(-2.0, -2);
    515     try test__fixdfdi(-1.99, -1);
    516     try test__fixdfdi(-1.0, -1);
    517     try test__fixdfdi(-0.99, 0);
    518     try test__fixdfdi(-0.5, 0);
    519     try test__fixdfdi(-math.floatMin(f64), 0);
    520     try test__fixdfdi(0.0, 0);
    521     try test__fixdfdi(math.floatMin(f64), 0);
    522     try test__fixdfdi(0.5, 0);
    523     try test__fixdfdi(0.99, 0);
    524     try test__fixdfdi(1.0, 1);
    525     try test__fixdfdi(1.5, 1);
    526     try test__fixdfdi(1.99, 1);
    527     try test__fixdfdi(2.0, 2);
    528     try test__fixdfdi(2.01, 2);
    529 
    530     try test__fixdfdi(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    531     try test__fixdfdi(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    532 
    533     try test__fixdfdi(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFFFFFFF800);
    534     try test__fixdfdi(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFFFFFFFC00);
    535     try test__fixdfdi(0x1.0000000000000p+63, 0x7FFFFFFFFFFFFFFF);
    536     try test__fixdfdi(0x1.0000000000001p+63, 0x7FFFFFFFFFFFFFFF);
    537 
    538     try test__fixdfdi(0x1.FFFFFFFFFFFFEp+126, 0x7FFFFFFFFFFFFFFF);
    539     try test__fixdfdi(0x1.FFFFFFFFFFFFFp+126, 0x7FFFFFFFFFFFFFFF);
    540     try test__fixdfdi(0x1.0000000000000p+127, 0x7FFFFFFFFFFFFFFF);
    541 
    542     try test__fixdfdi(0x1.FFFFFFFFFFFFFp+1023, 0x7FFFFFFFFFFFFFFF);
    543     try test__fixdfdi(0x1.FFFFFFFFFFFFFp+1023, math.maxInt(i64));
    544 
    545     try test__fixdfdi(math.floatMax(f64), math.maxInt(i64));
    546 }
    547 
    548 test "fixunsdfdi" {
    549     try test__fixunsdfdi(0.0, 0);
    550     try test__fixunsdfdi(0.5, 0);
    551     try test__fixunsdfdi(0.99, 0);
    552     try test__fixunsdfdi(1.0, 1);
    553     try test__fixunsdfdi(1.5, 1);
    554     try test__fixunsdfdi(1.99, 1);
    555     try test__fixunsdfdi(2.0, 2);
    556     try test__fixunsdfdi(2.01, 2);
    557     try test__fixunsdfdi(-0.5, 0);
    558     try test__fixunsdfdi(-0.99, 0);
    559     try test__fixunsdfdi(-1.0, 0);
    560     try test__fixunsdfdi(-1.5, 0);
    561     try test__fixunsdfdi(-1.99, 0);
    562     try test__fixunsdfdi(-2.0, 0);
    563     try test__fixunsdfdi(-2.01, 0);
    564 
    565     try test__fixunsdfdi(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    566     try test__fixunsdfdi(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    567 
    568     try test__fixunsdfdi(-0x1.FFFFFEp+62, 0);
    569     try test__fixunsdfdi(-0x1.FFFFFCp+62, 0);
    570 
    571     try test__fixunsdfdi(0x1.FFFFFFFFFFFFFp+63, 0xFFFFFFFFFFFFF800);
    572     try test__fixunsdfdi(0x1.0000000000000p+63, 0x8000000000000000);
    573     try test__fixunsdfdi(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFFFFFFFC00);
    574     try test__fixunsdfdi(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFFFFFFF800);
    575 
    576     try test__fixunsdfdi(-0x1.FFFFFFFFFFFFFp+62, 0);
    577     try test__fixunsdfdi(-0x1.FFFFFFFFFFFFEp+62, 0);
    578 }
    579 
    580 fn test__fixdfti(a: f64, expected: i128) !void {
    581     const x = __fixdfti(a);
    582     try testing.expect(x == expected);
    583 }
    584 
    585 fn test__fixunsdfti(a: f64, expected: u128) !void {
    586     const x = __fixunsdfti(a);
    587     try testing.expect(x == expected);
    588 }
    589 
    590 test "fixdfti" {
    591     try test__fixdfti(-math.floatMax(f64), math.minInt(i128));
    592 
    593     try test__fixdfti(-0x1.FFFFFFFFFFFFFp+1023, math.minInt(i128));
    594     try test__fixdfti(-0x1.FFFFFFFFFFFFFp+1023, -0x80000000000000000000000000000000);
    595 
    596     try test__fixdfti(-0x1.0000000000000p+127, -0x80000000000000000000000000000000);
    597     try test__fixdfti(-0x1.FFFFFFFFFFFFFp+126, -0x7FFFFFFFFFFFFC000000000000000000);
    598     try test__fixdfti(-0x1.FFFFFFFFFFFFEp+126, -0x7FFFFFFFFFFFF8000000000000000000);
    599 
    600     try test__fixdfti(-0x1.0000000000001p+63, -0x8000000000000800);
    601     try test__fixdfti(-0x1.0000000000000p+63, -0x8000000000000000);
    602     try test__fixdfti(-0x1.FFFFFFFFFFFFFp+62, -0x7FFFFFFFFFFFFC00);
    603     try test__fixdfti(-0x1.FFFFFFFFFFFFEp+62, -0x7FFFFFFFFFFFF800);
    604 
    605     try test__fixdfti(-0x1.FFFFFEp+62, -0x7fffff8000000000);
    606     try test__fixdfti(-0x1.FFFFFCp+62, -0x7fffff0000000000);
    607 
    608     try test__fixdfti(-2.01, -2);
    609     try test__fixdfti(-2.0, -2);
    610     try test__fixdfti(-1.99, -1);
    611     try test__fixdfti(-1.0, -1);
    612     try test__fixdfti(-0.99, 0);
    613     try test__fixdfti(-0.5, 0);
    614     try test__fixdfti(-math.floatMin(f64), 0);
    615     try test__fixdfti(0.0, 0);
    616     try test__fixdfti(math.floatMin(f64), 0);
    617     try test__fixdfti(0.5, 0);
    618     try test__fixdfti(0.99, 0);
    619     try test__fixdfti(1.0, 1);
    620     try test__fixdfti(1.5, 1);
    621     try test__fixdfti(1.99, 1);
    622     try test__fixdfti(2.0, 2);
    623     try test__fixdfti(2.01, 2);
    624 
    625     try test__fixdfti(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    626     try test__fixdfti(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    627 
    628     try test__fixdfti(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFFFFFFF800);
    629     try test__fixdfti(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFFFFFFFC00);
    630     try test__fixdfti(0x1.0000000000000p+63, 0x8000000000000000);
    631     try test__fixdfti(0x1.0000000000001p+63, 0x8000000000000800);
    632 
    633     try test__fixdfti(0x1.FFFFFFFFFFFFEp+126, 0x7FFFFFFFFFFFF8000000000000000000);
    634     try test__fixdfti(0x1.FFFFFFFFFFFFFp+126, 0x7FFFFFFFFFFFFC000000000000000000);
    635     try test__fixdfti(0x1.0000000000000p+127, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    636 
    637     try test__fixdfti(0x1.FFFFFFFFFFFFFp+1023, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    638     try test__fixdfti(0x1.FFFFFFFFFFFFFp+1023, math.maxInt(i128));
    639 
    640     try test__fixdfti(math.floatMax(f64), math.maxInt(i128));
    641 }
    642 
    643 test "fixunsdfti" {
    644     try test__fixunsdfti(0.0, 0);
    645 
    646     try test__fixunsdfti(0.5, 0);
    647     try test__fixunsdfti(0.99, 0);
    648     try test__fixunsdfti(1.0, 1);
    649     try test__fixunsdfti(1.5, 1);
    650     try test__fixunsdfti(1.99, 1);
    651     try test__fixunsdfti(2.0, 2);
    652     try test__fixunsdfti(2.01, 2);
    653     try test__fixunsdfti(-0.5, 0);
    654     try test__fixunsdfti(-0.99, 0);
    655     try test__fixunsdfti(-1.0, 0);
    656     try test__fixunsdfti(-1.5, 0);
    657     try test__fixunsdfti(-1.99, 0);
    658     try test__fixunsdfti(-2.0, 0);
    659     try test__fixunsdfti(-2.01, 0);
    660 
    661     try test__fixunsdfti(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    662     try test__fixunsdfti(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    663 
    664     try test__fixunsdfti(-0x1.FFFFFEp+62, 0);
    665     try test__fixunsdfti(-0x1.FFFFFCp+62, 0);
    666 
    667     try test__fixunsdfti(0x1.FFFFFFFFFFFFFp+63, 0xFFFFFFFFFFFFF800);
    668     try test__fixunsdfti(0x1.0000000000000p+63, 0x8000000000000000);
    669     try test__fixunsdfti(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFFFFFFFC00);
    670     try test__fixunsdfti(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFFFFFFF800);
    671 
    672     try test__fixunsdfti(0x1.FFFFFFFFFFFFFp+127, 0xFFFFFFFFFFFFF8000000000000000000);
    673     try test__fixunsdfti(0x1.0000000000000p+127, 0x80000000000000000000000000000000);
    674     try test__fixunsdfti(0x1.FFFFFFFFFFFFFp+126, 0x7FFFFFFFFFFFFC000000000000000000);
    675     try test__fixunsdfti(0x1.FFFFFFFFFFFFEp+126, 0x7FFFFFFFFFFFF8000000000000000000);
    676     try test__fixunsdfti(0x1.0000000000000p+128, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    677 
    678     try test__fixunsdfti(-0x1.FFFFFFFFFFFFFp+62, 0);
    679     try test__fixunsdfti(-0x1.FFFFFFFFFFFFEp+62, 0);
    680 }
    681 
    682 fn test_fixdfei(comptime T: type, expected: T, a: f64) !void {
    683     const int = @typeInfo(T).int;
    684     var actual: T = undefined;
    685     _ = switch (int.signedness) {
    686         .signed => __fixdfei,
    687         .unsigned => __fixunsdfei,
    688     }(@ptrCast(&actual), int.bits, a);
    689     try testing.expect(expected == actual);
    690 }
    691 
    692 test "fixdfei" {
    693     try test_fixdfei(i256, -1 << 255, -0x1p255);
    694     try test_fixdfei(i256, -1 << 127, -0x1p127);
    695     try test_fixdfei(i256, -1 << 100, -0x1p100);
    696     try test_fixdfei(i256, -1 << 50, -0x1p50);
    697     try test_fixdfei(i256, -1 << 1, -0x1p1);
    698     try test_fixdfei(i256, -1 << 0, -0x1p0);
    699     try test_fixdfei(i256, 0, 0);
    700     try test_fixdfei(i256, 1 << 0, 0x1p0);
    701     try test_fixdfei(i256, 1 << 1, 0x1p1);
    702     try test_fixdfei(i256, 1 << 50, 0x1p50);
    703     try test_fixdfei(i256, 1 << 100, 0x1p100);
    704     try test_fixdfei(i256, 1 << 127, 0x1p127);
    705     try test_fixdfei(i256, 1 << 254, 0x1p254);
    706 }
    707 
    708 test "fixundfei" {
    709     try test_fixdfei(u256, 0, 0);
    710     try test_fixdfei(u256, 1 << 0, 0x1p0);
    711     try test_fixdfei(u256, 1 << 1, 0x1p1);
    712     try test_fixdfei(u256, 1 << 50, 0x1p50);
    713     try test_fixdfei(u256, 1 << 100, 0x1p100);
    714     try test_fixdfei(u256, 1 << 127, 0x1p127);
    715     try test_fixdfei(u256, 1 << 255, 0x1p255);
    716 }
    717 
    718 fn test__fixtfsi(a: f128, expected: i32) !void {
    719     const x = __fixtfsi(a);
    720     try testing.expect(x == expected);
    721 }
    722 
    723 fn test__fixunstfsi(a: f128, expected: u32) !void {
    724     const x = __fixunstfsi(a);
    725     try testing.expect(x == expected);
    726 }
    727 
    728 test "fixtfsi" {
    729     try test__fixtfsi(-math.floatMax(f128), math.minInt(i32));
    730 
    731     try test__fixtfsi(-0x1.FFFFFFFFFFFFFp+1023, math.minInt(i32));
    732     try test__fixtfsi(-0x1.FFFFFFFFFFFFFp+1023, -0x80000000);
    733 
    734     try test__fixtfsi(-0x1.0000000000000p+127, -0x80000000);
    735     try test__fixtfsi(-0x1.FFFFFFFFFFFFFp+126, -0x80000000);
    736     try test__fixtfsi(-0x1.FFFFFFFFFFFFEp+126, -0x80000000);
    737 
    738     try test__fixtfsi(-0x1.0000000000001p+63, -0x80000000);
    739     try test__fixtfsi(-0x1.0000000000000p+63, -0x80000000);
    740     try test__fixtfsi(-0x1.FFFFFFFFFFFFFp+62, -0x80000000);
    741     try test__fixtfsi(-0x1.FFFFFFFFFFFFEp+62, -0x80000000);
    742 
    743     try test__fixtfsi(-0x1.FFFFFEp+62, -0x80000000);
    744     try test__fixtfsi(-0x1.FFFFFCp+62, -0x80000000);
    745 
    746     try test__fixtfsi(-0x1.000000p+31, -0x80000000);
    747     try test__fixtfsi(-0x1.FFFFFFp+30, -0x7FFFFFC0);
    748     try test__fixtfsi(-0x1.FFFFFEp+30, -0x7FFFFF80);
    749     try test__fixtfsi(-0x1.FFFFFCp+30, -0x7FFFFF00);
    750 
    751     try test__fixtfsi(-2.01, -2);
    752     try test__fixtfsi(-2.0, -2);
    753     try test__fixtfsi(-1.99, -1);
    754     try test__fixtfsi(-1.0, -1);
    755     try test__fixtfsi(-0.99, 0);
    756     try test__fixtfsi(-0.5, 0);
    757     try test__fixtfsi(-math.floatMin(f32), 0);
    758     try test__fixtfsi(0.0, 0);
    759     try test__fixtfsi(math.floatMin(f32), 0);
    760     try test__fixtfsi(0.5, 0);
    761     try test__fixtfsi(0.99, 0);
    762     try test__fixtfsi(1.0, 1);
    763     try test__fixtfsi(1.5, 1);
    764     try test__fixtfsi(1.99, 1);
    765     try test__fixtfsi(2.0, 2);
    766     try test__fixtfsi(2.01, 2);
    767 
    768     try test__fixtfsi(0x1.FFFFFCp+30, 0x7FFFFF00);
    769     try test__fixtfsi(0x1.FFFFFEp+30, 0x7FFFFF80);
    770     try test__fixtfsi(0x1.FFFFFFp+30, 0x7FFFFFC0);
    771     try test__fixtfsi(0x1.000000p+31, 0x7FFFFFFF);
    772 
    773     try test__fixtfsi(0x1.FFFFFCp+62, 0x7FFFFFFF);
    774     try test__fixtfsi(0x1.FFFFFEp+62, 0x7FFFFFFF);
    775 
    776     try test__fixtfsi(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFF);
    777     try test__fixtfsi(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFF);
    778     try test__fixtfsi(0x1.0000000000000p+63, 0x7FFFFFFF);
    779     try test__fixtfsi(0x1.0000000000001p+63, 0x7FFFFFFF);
    780 
    781     try test__fixtfsi(0x1.FFFFFFFFFFFFEp+126, 0x7FFFFFFF);
    782     try test__fixtfsi(0x1.FFFFFFFFFFFFFp+126, 0x7FFFFFFF);
    783     try test__fixtfsi(0x1.0000000000000p+127, 0x7FFFFFFF);
    784 
    785     try test__fixtfsi(0x1.FFFFFFFFFFFFFp+1023, 0x7FFFFFFF);
    786     try test__fixtfsi(0x1.FFFFFFFFFFFFFp+1023, math.maxInt(i32));
    787 
    788     try test__fixtfsi(math.floatMax(f128), math.maxInt(i32));
    789 }
    790 
    791 test "fixunstfsi" {
    792     try test__fixunstfsi(math.inf(f128), 0xffffffff);
    793     try test__fixunstfsi(0, 0x0);
    794     try test__fixunstfsi(0x1.23456789abcdefp+5, 0x24);
    795     try test__fixunstfsi(0x1.23456789abcdefp-3, 0x0);
    796     try test__fixunstfsi(0x1.23456789abcdefp+20, 0x123456);
    797     try test__fixunstfsi(0x1.23456789abcdefp+40, 0xffffffff);
    798     try test__fixunstfsi(0x1.23456789abcdefp+256, 0xffffffff);
    799     try test__fixunstfsi(-0x1.23456789abcdefp+3, 0x0);
    800 
    801     try test__fixunstfsi(0x1p+32, 0xFFFFFFFF);
    802 }
    803 
    804 fn test__fixtfdi(a: f128, expected: i64) !void {
    805     const x = __fixtfdi(a);
    806     try testing.expect(x == expected);
    807 }
    808 
    809 fn test__fixunstfdi(a: f128, expected: u64) !void {
    810     const x = __fixunstfdi(a);
    811     try testing.expect(x == expected);
    812 }
    813 
    814 test "fixtfdi" {
    815     try test__fixtfdi(-math.floatMax(f128), math.minInt(i64));
    816 
    817     try test__fixtfdi(-0x1.FFFFFFFFFFFFFp+1023, math.minInt(i64));
    818     try test__fixtfdi(-0x1.FFFFFFFFFFFFFp+1023, -0x8000000000000000);
    819 
    820     try test__fixtfdi(-0x1.0000000000000p+127, -0x8000000000000000);
    821     try test__fixtfdi(-0x1.FFFFFFFFFFFFFp+126, -0x8000000000000000);
    822     try test__fixtfdi(-0x1.FFFFFFFFFFFFEp+126, -0x8000000000000000);
    823 
    824     try test__fixtfdi(-0x1.0000000000001p+63, -0x8000000000000000);
    825     try test__fixtfdi(-0x1.0000000000000p+63, -0x8000000000000000);
    826     try test__fixtfdi(-0x1.FFFFFFFFFFFFFp+62, -0x7FFFFFFFFFFFFC00);
    827     try test__fixtfdi(-0x1.FFFFFFFFFFFFEp+62, -0x7FFFFFFFFFFFF800);
    828 
    829     try test__fixtfdi(-0x1.FFFFFEp+62, -0x7FFFFF8000000000);
    830     try test__fixtfdi(-0x1.FFFFFCp+62, -0x7FFFFF0000000000);
    831 
    832     try test__fixtfdi(-0x1.000000p+31, -0x80000000);
    833     try test__fixtfdi(-0x1.FFFFFFp+30, -0x7FFFFFC0);
    834     try test__fixtfdi(-0x1.FFFFFEp+30, -0x7FFFFF80);
    835     try test__fixtfdi(-0x1.FFFFFCp+30, -0x7FFFFF00);
    836 
    837     try test__fixtfdi(-2.01, -2);
    838     try test__fixtfdi(-2.0, -2);
    839     try test__fixtfdi(-1.99, -1);
    840     try test__fixtfdi(-1.0, -1);
    841     try test__fixtfdi(-0.99, 0);
    842     try test__fixtfdi(-0.5, 0);
    843     try test__fixtfdi(-math.floatMin(f64), 0);
    844     try test__fixtfdi(0.0, 0);
    845     try test__fixtfdi(math.floatMin(f64), 0);
    846     try test__fixtfdi(0.5, 0);
    847     try test__fixtfdi(0.99, 0);
    848     try test__fixtfdi(1.0, 1);
    849     try test__fixtfdi(1.5, 1);
    850     try test__fixtfdi(1.99, 1);
    851     try test__fixtfdi(2.0, 2);
    852     try test__fixtfdi(2.01, 2);
    853 
    854     try test__fixtfdi(0x1.FFFFFCp+30, 0x7FFFFF00);
    855     try test__fixtfdi(0x1.FFFFFEp+30, 0x7FFFFF80);
    856     try test__fixtfdi(0x1.FFFFFFp+30, 0x7FFFFFC0);
    857     try test__fixtfdi(0x1.000000p+31, 0x80000000);
    858 
    859     try test__fixtfdi(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    860     try test__fixtfdi(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    861 
    862     try test__fixtfdi(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFFFFFFF800);
    863     try test__fixtfdi(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFFFFFFFC00);
    864     try test__fixtfdi(0x1.0000000000000p+63, 0x7FFFFFFFFFFFFFFF);
    865     try test__fixtfdi(0x1.0000000000001p+63, 0x7FFFFFFFFFFFFFFF);
    866 
    867     try test__fixtfdi(0x1.FFFFFFFFFFFFEp+126, 0x7FFFFFFFFFFFFFFF);
    868     try test__fixtfdi(0x1.FFFFFFFFFFFFFp+126, 0x7FFFFFFFFFFFFFFF);
    869     try test__fixtfdi(0x1.0000000000000p+127, 0x7FFFFFFFFFFFFFFF);
    870 
    871     try test__fixtfdi(0x1.FFFFFFFFFFFFFp+1023, 0x7FFFFFFFFFFFFFFF);
    872     try test__fixtfdi(0x1.FFFFFFFFFFFFFp+1023, math.maxInt(i64));
    873 
    874     try test__fixtfdi(math.floatMax(f128), math.maxInt(i64));
    875 }
    876 
    877 test "fixunstfdi" {
    878     try test__fixunstfdi(0.0, 0);
    879 
    880     try test__fixunstfdi(0.5, 0);
    881     try test__fixunstfdi(0.99, 0);
    882     try test__fixunstfdi(1.0, 1);
    883     try test__fixunstfdi(1.5, 1);
    884     try test__fixunstfdi(1.99, 1);
    885     try test__fixunstfdi(2.0, 2);
    886     try test__fixunstfdi(2.01, 2);
    887     try test__fixunstfdi(-0.5, 0);
    888     try test__fixunstfdi(-0.99, 0);
    889     try test__fixunstfdi(-1.0, 0);
    890     try test__fixunstfdi(-1.5, 0);
    891     try test__fixunstfdi(-1.99, 0);
    892     try test__fixunstfdi(-2.0, 0);
    893     try test__fixunstfdi(-2.01, 0);
    894 
    895     try test__fixunstfdi(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    896     try test__fixunstfdi(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    897 
    898     try test__fixunstfdi(-0x1.FFFFFEp+62, 0);
    899     try test__fixunstfdi(-0x1.FFFFFCp+62, 0);
    900 
    901     try test__fixunstfdi(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFFFFFFFC00);
    902     try test__fixunstfdi(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFFFFFFF800);
    903 
    904     try test__fixunstfdi(-0x1.FFFFFFFFFFFFFp+62, 0);
    905     try test__fixunstfdi(-0x1.FFFFFFFFFFFFEp+62, 0);
    906 
    907     try test__fixunstfdi(0x1.FFFFFFFFFFFFFFFEp+63, 0xFFFFFFFFFFFFFFFF);
    908     try test__fixunstfdi(0x1.0000000000000002p+63, 0x8000000000000001);
    909     try test__fixunstfdi(0x1.0000000000000000p+63, 0x8000000000000000);
    910     try test__fixunstfdi(0x1.FFFFFFFFFFFFFFFCp+62, 0x7FFFFFFFFFFFFFFF);
    911     try test__fixunstfdi(0x1.FFFFFFFFFFFFFFF8p+62, 0x7FFFFFFFFFFFFFFE);
    912     try test__fixunstfdi(0x1p+64, 0xFFFFFFFFFFFFFFFF);
    913 
    914     try test__fixunstfdi(-0x1.0000000000000000p+63, 0);
    915     try test__fixunstfdi(-0x1.FFFFFFFFFFFFFFFCp+62, 0);
    916     try test__fixunstfdi(-0x1.FFFFFFFFFFFFFFF8p+62, 0);
    917 }
    918 
    919 fn test__fixtfti(a: f128, expected: i128) !void {
    920     const x = __fixtfti(a);
    921     try testing.expect(x == expected);
    922 }
    923 
    924 fn test__fixunstfti(a: f128, expected: u128) !void {
    925     const x = __fixunstfti(a);
    926     try testing.expect(x == expected);
    927 }
    928 
    929 test "fixtfti" {
    930     try test__fixtfti(-math.floatMax(f128), math.minInt(i128));
    931 
    932     try test__fixtfti(-0x1.FFFFFFFFFFFFFp+1023, math.minInt(i128));
    933     try test__fixtfti(-0x1.FFFFFFFFFFFFFp+1023, -0x80000000000000000000000000000000);
    934 
    935     try test__fixtfti(-0x1.0000000000000p+127, -0x80000000000000000000000000000000);
    936     try test__fixtfti(-0x1.FFFFFFFFFFFFFp+126, -0x7FFFFFFFFFFFFC000000000000000000);
    937     try test__fixtfti(-0x1.FFFFFFFFFFFFEp+126, -0x7FFFFFFFFFFFF8000000000000000000);
    938 
    939     try test__fixtfti(-0x1.0000000000001p+63, -0x8000000000000800);
    940     try test__fixtfti(-0x1.0000000000000p+63, -0x8000000000000000);
    941     try test__fixtfti(-0x1.FFFFFFFFFFFFFp+62, -0x7FFFFFFFFFFFFC00);
    942     try test__fixtfti(-0x1.FFFFFFFFFFFFEp+62, -0x7FFFFFFFFFFFF800);
    943 
    944     try test__fixtfti(-0x1.FFFFFEp+62, -0x7fffff8000000000);
    945     try test__fixtfti(-0x1.FFFFFCp+62, -0x7fffff0000000000);
    946 
    947     try test__fixtfti(-2.01, -2);
    948     try test__fixtfti(-2.0, -2);
    949     try test__fixtfti(-1.99, -1);
    950     try test__fixtfti(-1.0, -1);
    951     try test__fixtfti(-0.99, 0);
    952     try test__fixtfti(-0.5, 0);
    953     try test__fixtfti(-math.floatMin(f128), 0);
    954     try test__fixtfti(0.0, 0);
    955     try test__fixtfti(math.floatMin(f128), 0);
    956     try test__fixtfti(0.5, 0);
    957     try test__fixtfti(0.99, 0);
    958     try test__fixtfti(1.0, 1);
    959     try test__fixtfti(1.5, 1);
    960     try test__fixtfti(1.99, 1);
    961     try test__fixtfti(2.0, 2);
    962     try test__fixtfti(2.01, 2);
    963 
    964     try test__fixtfti(0x1.FFFFFCp+62, 0x7FFFFF0000000000);
    965     try test__fixtfti(0x1.FFFFFEp+62, 0x7FFFFF8000000000);
    966 
    967     try test__fixtfti(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFFFFFFF800);
    968     try test__fixtfti(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFFFFFFFC00);
    969     try test__fixtfti(0x1.0000000000000p+63, 0x8000000000000000);
    970     try test__fixtfti(0x1.0000000000001p+63, 0x8000000000000800);
    971 
    972     try test__fixtfti(0x1.FFFFFFFFFFFFEp+126, 0x7FFFFFFFFFFFF8000000000000000000);
    973     try test__fixtfti(0x1.FFFFFFFFFFFFFp+126, 0x7FFFFFFFFFFFFC000000000000000000);
    974     try test__fixtfti(0x1.0000000000000p+127, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    975 
    976     try test__fixtfti(0x1.FFFFFFFFFFFFFp+1023, 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    977     try test__fixtfti(0x1.FFFFFFFFFFFFFp+1023, math.maxInt(i128));
    978 
    979     try test__fixtfti(math.floatMax(f128), math.maxInt(i128));
    980 }
    981 
    982 test "fixunstfti" {
    983     try test__fixunstfti(math.inf(f128), 0xffffffffffffffffffffffffffffffff);
    984 
    985     try test__fixunstfti(0.0, 0);
    986 
    987     try test__fixunstfti(0.5, 0);
    988     try test__fixunstfti(0.99, 0);
    989     try test__fixunstfti(1.0, 1);
    990     try test__fixunstfti(1.5, 1);
    991     try test__fixunstfti(1.99, 1);
    992     try test__fixunstfti(2.0, 2);
    993     try test__fixunstfti(2.01, 2);
    994     try test__fixunstfti(-0.01, 0);
    995     try test__fixunstfti(-0.99, 0);
    996 
    997     try test__fixunstfti(0x1p+128, 0xffffffffffffffffffffffffffffffff);
    998 
    999     try test__fixunstfti(0x1.FFFFFEp+126, 0x7fffff80000000000000000000000000);
   1000     try test__fixunstfti(0x1.FFFFFEp+127, 0xffffff00000000000000000000000000);
   1001     try test__fixunstfti(0x1.FFFFFEp+128, 0xffffffffffffffffffffffffffffffff);
   1002     try test__fixunstfti(0x1.FFFFFEp+129, 0xffffffffffffffffffffffffffffffff);
   1003 }
   1004 
   1005 fn test__fixunshfti(a: f16, expected: u128) !void {
   1006     const x = __fixunshfti(a);
   1007     try testing.expect(x == expected);
   1008 }
   1009 
   1010 test "fixunshfti for f16" {
   1011     try test__fixunshfti(math.inf(f16), math.maxInt(u128));
   1012     try test__fixunshfti(math.floatMax(f16), 65504);
   1013 }
   1014 
   1015 fn test__fixunsxfti(a: f80, expected: u128) !void {
   1016     const x = __fixunsxfti(a);
   1017     try testing.expect(x == expected);
   1018 }
   1019 
   1020 test "fixunsxfti for f80" {
   1021     try test__fixunsxfti(math.inf(f80), math.maxInt(u128));
   1022     try test__fixunsxfti(math.floatMax(f80), math.maxInt(u128));
   1023     try test__fixunsxfti(math.maxInt(u64), math.maxInt(u64));
   1024 }