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 }