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}