master
   1const std = @import("std");
   2const testing = std.testing;
   3const math = std.math;
   4
   5const __fixunshfti = @import("fixunshfti.zig").__fixunshfti;
   6const __fixunsxfti = @import("fixunsxfti.zig").__fixunsxfti;
   7
   8// Conversion from f32
   9const __fixsfsi = @import("fixsfsi.zig").__fixsfsi;
  10const __fixunssfsi = @import("fixunssfsi.zig").__fixunssfsi;
  11const __fixsfdi = @import("fixsfdi.zig").__fixsfdi;
  12const __fixunssfdi = @import("fixunssfdi.zig").__fixunssfdi;
  13const __fixsfti = @import("fixsfti.zig").__fixsfti;
  14const __fixunssfti = @import("fixunssfti.zig").__fixunssfti;
  15const __fixsfei = @import("fixsfei.zig").__fixsfei;
  16const __fixunssfei = @import("fixunssfei.zig").__fixunssfei;
  17
  18// Conversion from f64
  19const __fixdfsi = @import("fixdfsi.zig").__fixdfsi;
  20const __fixunsdfsi = @import("fixunsdfsi.zig").__fixunsdfsi;
  21const __fixdfdi = @import("fixdfdi.zig").__fixdfdi;
  22const __fixunsdfdi = @import("fixunsdfdi.zig").__fixunsdfdi;
  23const __fixdfti = @import("fixdfti.zig").__fixdfti;
  24const __fixunsdfti = @import("fixunsdfti.zig").__fixunsdfti;
  25const __fixdfei = @import("fixdfei.zig").__fixdfei;
  26const __fixunsdfei = @import("fixunsdfei.zig").__fixunsdfei;
  27
  28// Conversion from f128
  29const __fixtfsi = @import("fixtfsi.zig").__fixtfsi;
  30const __fixunstfsi = @import("fixunstfsi.zig").__fixunstfsi;
  31const __fixtfdi = @import("fixtfdi.zig").__fixtfdi;
  32const __fixunstfdi = @import("fixunstfdi.zig").__fixunstfdi;
  33const __fixtfti = @import("fixtfti.zig").__fixtfti;
  34const __fixunstfti = @import("fixunstfti.zig").__fixunstfti;
  35
  36fn test__fixsfsi(a: f32, expected: i32) !void {
  37    const x = __fixsfsi(a);
  38    try testing.expect(x == expected);
  39}
  40
  41fn test__fixunssfsi(a: f32, expected: u32) !void {
  42    const x = __fixunssfsi(a);
  43    try testing.expect(x == expected);
  44}
  45
  46test "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
 110test "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
 139fn test__fixsfdi(a: f32, expected: i64) !void {
 140    const x = __fixsfdi(a);
 141    try testing.expect(x == expected);
 142}
 143
 144fn test__fixunssfdi(a: f32, expected: u64) !void {
 145    const x = __fixunssfdi(a);
 146    try testing.expect(x == expected);
 147}
 148
 149test "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
 204test "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
 232fn test__fixsfti(a: f32, expected: i128) !void {
 233    const x = __fixsfti(a);
 234    try testing.expect(x == expected);
 235}
 236
 237fn test__fixunssfti(a: f32, expected: u128) !void {
 238    const x = __fixunssfti(a);
 239    try testing.expect(x == expected);
 240}
 241
 242test "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
 313test "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
 349fn 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
 359test "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
 373test "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
 382fn test__fixdfsi(a: f64, expected: i32) !void {
 383    const x = __fixdfsi(a);
 384    try testing.expect(x == expected);
 385}
 386
 387fn test__fixunsdfsi(a: f64, expected: u32) !void {
 388    const x = __fixunsdfsi(a);
 389    try testing.expect(x == expected);
 390}
 391
 392test "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
 453test "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
 485fn test__fixdfdi(a: f64, expected: i64) !void {
 486    const x = __fixdfdi(a);
 487    try testing.expect(x == expected);
 488}
 489
 490fn test__fixunsdfdi(a: f64, expected: u64) !void {
 491    const x = __fixunsdfdi(a);
 492    try testing.expect(x == expected);
 493}
 494
 495test "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
 548test "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
 580fn test__fixdfti(a: f64, expected: i128) !void {
 581    const x = __fixdfti(a);
 582    try testing.expect(x == expected);
 583}
 584
 585fn test__fixunsdfti(a: f64, expected: u128) !void {
 586    const x = __fixunsdfti(a);
 587    try testing.expect(x == expected);
 588}
 589
 590test "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
 643test "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
 682fn 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
 692test "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
 708test "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
 718fn test__fixtfsi(a: f128, expected: i32) !void {
 719    const x = __fixtfsi(a);
 720    try testing.expect(x == expected);
 721}
 722
 723fn test__fixunstfsi(a: f128, expected: u32) !void {
 724    const x = __fixunstfsi(a);
 725    try testing.expect(x == expected);
 726}
 727
 728test "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
 791test "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
 804fn test__fixtfdi(a: f128, expected: i64) !void {
 805    const x = __fixtfdi(a);
 806    try testing.expect(x == expected);
 807}
 808
 809fn test__fixunstfdi(a: f128, expected: u64) !void {
 810    const x = __fixunstfdi(a);
 811    try testing.expect(x == expected);
 812}
 813
 814test "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
 877test "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
 919fn test__fixtfti(a: f128, expected: i128) !void {
 920    const x = __fixtfti(a);
 921    try testing.expect(x == expected);
 922}
 923
 924fn test__fixunstfti(a: f128, expected: u128) !void {
 925    const x = __fixunstfti(a);
 926    try testing.expect(x == expected);
 927}
 928
 929test "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
 982test "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
1005fn test__fixunshfti(a: f16, expected: u128) !void {
1006    const x = __fixunshfti(a);
1007    try testing.expect(x == expected);
1008}
1009
1010test "fixunshfti for f16" {
1011    try test__fixunshfti(math.inf(f16), math.maxInt(u128));
1012    try test__fixunshfti(math.floatMax(f16), 65504);
1013}
1014
1015fn test__fixunsxfti(a: f80, expected: u128) !void {
1016    const x = __fixunsxfti(a);
1017    try testing.expect(x == expected);
1018}
1019
1020test "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}