authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-11-18 19:10:02-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-11-19 01:29:51-05:00
log0697883d01cb1bbdc5c34175b06eb47d5158011a
tree4e8a8ca3b216e0286b8bba27eaed10959f1d348f
parentea590ece4bcc26175d890dd82899ffc9ef64b6c3

extract C backend behavior tests with vectors

No functional change. Separates various float operations behavior tests from the ones that test vectors.

1 files changed, 212 insertions(+), 100 deletions(-)

test/behavior/floatop.zig+212-100
......@@ -99,7 +99,6 @@ test "negative f128 floatToInt at compile-time" {
9999
100100test "@sqrt" {
101101 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
102 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
103102 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
104103 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
105104 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
......@@ -115,15 +114,6 @@ fn testSqrt() !void {
115114 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 1.1)), 1.0488088481701516, epsilon));
116115 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 2.0)), 1.4142135623730950, epsilon));
117116
118 {
119 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 };
120 var result = @sqrt(v);
121 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 1.1)), result[0], epsilon));
122 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 2.2)), result[1], epsilon));
123 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 3.3)), result[2], epsilon));
124 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 4.4)), result[3], epsilon));
125 }
126
127117 if (builtin.zig_backend == .stage1) {
128118 if (has_f80_rt) {
129119 // TODO https://github.com/ziglang/zig/issues/10875
......@@ -145,6 +135,26 @@ fn testSqrt() !void {
145135 }
146136}
147137
138test "@sqrt with vectors" {
139 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
140 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
141 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
142 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
143 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
144
145 comptime try testSqrtWithVectors();
146 try testSqrtWithVectors();
147}
148
149fn testSqrtWithVectors() !void {
150 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 };
151 var result = @sqrt(v);
152 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 1.1)), result[0], epsilon));
153 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 2.2)), result[1], epsilon));
154 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 3.3)), result[2], epsilon));
155 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 4.4)), result[3], epsilon));
156}
157
148158test "more @sqrt f16 tests" {
149159 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
150160 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
......@@ -176,7 +186,6 @@ test "@sin" {
176186 return error.SkipZigTest;
177187 }
178188 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
179 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
180189 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
181190 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
182191 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
......@@ -193,15 +202,27 @@ fn testSin() !void {
193202 try expect(math.approxEqAbs(ty, @sin(@as(ty, std.math.pi / 2.0)), 1, eps));
194203 try expect(math.approxEqAbs(ty, @sin(@as(ty, std.math.pi / 4.0)), 0.7071067811865475, eps));
195204 }
205}
196206
197 {
198 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 };
199 var result = @sin(v);
200 try expect(math.approxEqAbs(f32, @sin(@as(f32, 1.1)), result[0], epsilon));
201 try expect(math.approxEqAbs(f32, @sin(@as(f32, 2.2)), result[1], epsilon));
202 try expect(math.approxEqAbs(f32, @sin(@as(f32, 3.3)), result[2], epsilon));
203 try expect(math.approxEqAbs(f32, @sin(@as(f32, 4.4)), result[3], epsilon));
204 }
207test "@sin with vectors" {
208 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
209 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
210 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
211 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
212 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
213 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
214
215 comptime try testSinWithVectors();
216 try testSinWithVectors();
217}
218
219fn testSinWithVectors() !void {
220 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 };
221 var result = @sin(v);
222 try expect(math.approxEqAbs(f32, @sin(@as(f32, 1.1)), result[0], epsilon));
223 try expect(math.approxEqAbs(f32, @sin(@as(f32, 2.2)), result[1], epsilon));
224 try expect(math.approxEqAbs(f32, @sin(@as(f32, 3.3)), result[2], epsilon));
225 try expect(math.approxEqAbs(f32, @sin(@as(f32, 4.4)), result[3], epsilon));
205226}
206227
207228test "@cos" {
......@@ -210,7 +231,6 @@ test "@cos" {
210231 return error.SkipZigTest;
211232 }
212233 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
213 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
214234 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
215235 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
216236 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
......@@ -227,20 +247,31 @@ fn testCos() !void {
227247 try expect(math.approxEqAbs(ty, @cos(@as(ty, std.math.pi / 2.0)), 0, eps));
228248 try expect(math.approxEqAbs(ty, @cos(@as(ty, std.math.pi / 4.0)), 0.7071067811865475, eps));
229249 }
250}
230251
231 {
232 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 };
233 var result = @cos(v);
234 try expect(math.approxEqAbs(f32, @cos(@as(f32, 1.1)), result[0], epsilon));
235 try expect(math.approxEqAbs(f32, @cos(@as(f32, 2.2)), result[1], epsilon));
236 try expect(math.approxEqAbs(f32, @cos(@as(f32, 3.3)), result[2], epsilon));
237 try expect(math.approxEqAbs(f32, @cos(@as(f32, 4.4)), result[3], epsilon));
238 }
252test "@cos with vectors" {
253 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
254 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
255 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
256 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
257 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
258 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
259
260 comptime try testCosWithVectors();
261 try testCosWithVectors();
262}
263
264fn testCosWithVectors() !void {
265 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 };
266 var result = @cos(v);
267 try expect(math.approxEqAbs(f32, @cos(@as(f32, 1.1)), result[0], epsilon));
268 try expect(math.approxEqAbs(f32, @cos(@as(f32, 2.2)), result[1], epsilon));
269 try expect(math.approxEqAbs(f32, @cos(@as(f32, 3.3)), result[2], epsilon));
270 try expect(math.approxEqAbs(f32, @cos(@as(f32, 4.4)), result[3], epsilon));
239271}
240272
241273test "@exp" {
242274 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
243 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
244275 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
245276 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
246277 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
......@@ -256,20 +287,30 @@ fn testExp() !void {
256287 try expect(math.approxEqAbs(ty, @exp(@as(ty, 2)), 7.389056098930650, eps));
257288 try expect(math.approxEqAbs(ty, @exp(@as(ty, 5)), 148.4131591025766, eps));
258289 }
290}
259291
260 {
261 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };
262 var result = @exp(v);
263 try expect(math.approxEqAbs(f32, @exp(@as(f32, 1.1)), result[0], epsilon));
264 try expect(math.approxEqAbs(f32, @exp(@as(f32, 2.2)), result[1], epsilon));
265 try expect(math.approxEqAbs(f32, @exp(@as(f32, 0.3)), result[2], epsilon));
266 try expect(math.approxEqAbs(f32, @exp(@as(f32, 0.4)), result[3], epsilon));
267 }
292test "@exp with vectors" {
293 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
294 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
295 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
296 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
297 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
298
299 comptime try testExpWithVectors();
300 try testExpWithVectors();
301}
302
303fn testExpWithVectors() !void {
304 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };
305 var result = @exp(v);
306 try expect(math.approxEqAbs(f32, @exp(@as(f32, 1.1)), result[0], epsilon));
307 try expect(math.approxEqAbs(f32, @exp(@as(f32, 2.2)), result[1], epsilon));
308 try expect(math.approxEqAbs(f32, @exp(@as(f32, 0.3)), result[2], epsilon));
309 try expect(math.approxEqAbs(f32, @exp(@as(f32, 0.4)), result[3], epsilon));
268310}
269311
270312test "@exp2" {
271313 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
272 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
273314 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
274315 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
275316 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
......@@ -285,15 +326,26 @@ fn testExp2() !void {
285326 try expect(math.approxEqAbs(ty, @exp2(@as(ty, 1.5)), 2.8284271247462, eps));
286327 try expect(math.approxEqAbs(ty, @exp2(@as(ty, 4.5)), 22.627416997969, eps));
287328 }
329}
288330
289 {
290 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };
291 var result = @exp2(v);
292 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 1.1)), result[0], epsilon));
293 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 2.2)), result[1], epsilon));
294 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 0.3)), result[2], epsilon));
295 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 0.4)), result[3], epsilon));
296 }
331test "@exp2" {
332 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
333 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
334 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
335 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
336 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
337
338 comptime try testExp2WithVectors();
339 try testExp2WithVectors();
340}
341
342fn testExp2WithVectors() !void {
343 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };
344 var result = @exp2(v);
345 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 1.1)), result[0], epsilon));
346 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 2.2)), result[1], epsilon));
347 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 0.3)), result[2], epsilon));
348 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 0.4)), result[3], epsilon));
297349}
298350
299351test "@log" {
......@@ -348,7 +400,6 @@ test "@log2" {
348400 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
349401 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
350402 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
351 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
352403
353404 comptime try testLog2();
354405 try testLog2();
......@@ -361,15 +412,26 @@ fn testLog2() !void {
361412 try expect(math.approxEqAbs(ty, @log2(@as(ty, 6)), 2.5849625007212, eps));
362413 try expect(math.approxEqAbs(ty, @log2(@as(ty, 10)), 3.3219280948874, eps));
363414 }
415}
364416
365 {
366 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };
367 var result = @log2(v);
368 try expect(@log2(@as(f32, 1.1)) == result[0]);
369 try expect(@log2(@as(f32, 2.2)) == result[1]);
370 try expect(@log2(@as(f32, 0.3)) == result[2]);
371 try expect(@log2(@as(f32, 0.4)) == result[3]);
372 }
417test "@log2 with vectors" {
418 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
419 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
420 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
421 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
422 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
423
424 comptime try testLog2WithVectors();
425 try testLog2WithVectors();
426}
427
428fn testLog2WithVectors() !void {
429 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };
430 var result = @log2(v);
431 try expect(@log2(@as(f32, 1.1)) == result[0]);
432 try expect(@log2(@as(f32, 2.2)) == result[1]);
433 try expect(@log2(@as(f32, 0.3)) == result[2]);
434 try expect(@log2(@as(f32, 0.4)) == result[3]);
373435}
374436
375437test "@log10" {
......@@ -377,7 +439,6 @@ test "@log10" {
377439 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
378440 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
379441 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
380 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
381442
382443 comptime try testLog10();
383444 try testLog10();
......@@ -390,20 +451,30 @@ fn testLog10() !void {
390451 try expect(math.approxEqAbs(ty, @log10(@as(ty, 15)), 1.176091259056, eps));
391452 try expect(math.approxEqAbs(ty, @log10(@as(ty, 50)), 1.698970004336, eps));
392453 }
454}
393455
394 {
395 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };
396 var result = @log10(v);
397 try expect(@log10(@as(f32, 1.1)) == result[0]);
398 try expect(@log10(@as(f32, 2.2)) == result[1]);
399 try expect(@log10(@as(f32, 0.3)) == result[2]);
400 try expect(@log10(@as(f32, 0.4)) == result[3]);
401 }
456test "@log10 with vectors" {
457 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
458 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
459 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
460 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
461 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
462
463 comptime try testLog10WithVectors();
464 try testLog10WithVectors();
465}
466
467fn testLog10WithVectors() !void {
468 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };
469 var result = @log10(v);
470 try expect(@log10(@as(f32, 1.1)) == result[0]);
471 try expect(@log10(@as(f32, 2.2)) == result[1]);
472 try expect(@log10(@as(f32, 0.3)) == result[2]);
473 try expect(@log10(@as(f32, 0.4)) == result[3]);
402474}
403475
404476test "@fabs" {
405477 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
406 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
407478 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
408479 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
409480 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
......@@ -428,20 +499,30 @@ fn testFabs() !void {
428499 // try expect(@fabs(a) == 2.5);
429500 // try expect(@fabs(b) == 2.5);
430501 // }
502}
431503
432 {
433 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };
434 var result = @fabs(v);
435 try expect(math.approxEqAbs(f32, @fabs(@as(f32, 1.1)), result[0], epsilon));
436 try expect(math.approxEqAbs(f32, @fabs(@as(f32, -2.2)), result[1], epsilon));
437 try expect(math.approxEqAbs(f32, @fabs(@as(f32, 0.3)), result[2], epsilon));
438 try expect(math.approxEqAbs(f32, @fabs(@as(f32, -0.4)), result[3], epsilon));
439 }
504test "@fabs with vectors" {
505 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
506 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
507 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
508 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
509 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
510
511 comptime try testFabsWithVectors();
512 try testFabsWithVectors();
513}
514
515fn testFabsWithVectors() !void {
516 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };
517 var result = @fabs(v);
518 try expect(math.approxEqAbs(f32, @fabs(@as(f32, 1.1)), result[0], epsilon));
519 try expect(math.approxEqAbs(f32, @fabs(@as(f32, -2.2)), result[1], epsilon));
520 try expect(math.approxEqAbs(f32, @fabs(@as(f32, 0.3)), result[2], epsilon));
521 try expect(math.approxEqAbs(f32, @fabs(@as(f32, -0.4)), result[3], epsilon));
440522}
441523
442524test "@floor" {
443525 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
444 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
445526 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
446527 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
447528 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
......@@ -461,20 +542,30 @@ fn testFloor() !void {
461542 // var a: f80 = 3.5;
462543 // try expect(@floor(a) == 3);
463544 // }
545}
464546
465 {
466 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };
467 var result = @floor(v);
468 try expect(math.approxEqAbs(f32, @floor(@as(f32, 1.1)), result[0], epsilon));
469 try expect(math.approxEqAbs(f32, @floor(@as(f32, -2.2)), result[1], epsilon));
470 try expect(math.approxEqAbs(f32, @floor(@as(f32, 0.3)), result[2], epsilon));
471 try expect(math.approxEqAbs(f32, @floor(@as(f32, -0.4)), result[3], epsilon));
472 }
547test "@floor with vectors" {
548 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
549 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
550 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
551 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
552 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
553
554 comptime try testFloorWithVectors();
555 try testFloorWithVectors();
556}
557
558fn testFloorWithVectors() !void {
559 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };
560 var result = @floor(v);
561 try expect(math.approxEqAbs(f32, @floor(@as(f32, 1.1)), result[0], epsilon));
562 try expect(math.approxEqAbs(f32, @floor(@as(f32, -2.2)), result[1], epsilon));
563 try expect(math.approxEqAbs(f32, @floor(@as(f32, 0.3)), result[2], epsilon));
564 try expect(math.approxEqAbs(f32, @floor(@as(f32, -0.4)), result[3], epsilon));
473565}
474566
475567test "@ceil" {
476568 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
477 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
478569 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
479570 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
480571 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
......@@ -494,20 +585,30 @@ fn testCeil() !void {
494585 // var a: f80 = 3.5;
495586 // try expect(@ceil(a) == 4);
496587 // }
588}
497589
498 {
499 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };
500 var result = @ceil(v);
501 try expect(math.approxEqAbs(f32, @ceil(@as(f32, 1.1)), result[0], epsilon));
502 try expect(math.approxEqAbs(f32, @ceil(@as(f32, -2.2)), result[1], epsilon));
503 try expect(math.approxEqAbs(f32, @ceil(@as(f32, 0.3)), result[2], epsilon));
504 try expect(math.approxEqAbs(f32, @ceil(@as(f32, -0.4)), result[3], epsilon));
505 }
590test "@ceil with vectors" {
591 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
592 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
593 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
594 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
595 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
596
597 comptime try testCeilWithVectors();
598 try testCeilWithVectors();
599}
600
601fn testCeilWithVectors() !void {
602 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };
603 var result = @ceil(v);
604 try expect(math.approxEqAbs(f32, @ceil(@as(f32, 1.1)), result[0], epsilon));
605 try expect(math.approxEqAbs(f32, @ceil(@as(f32, -2.2)), result[1], epsilon));
606 try expect(math.approxEqAbs(f32, @ceil(@as(f32, 0.3)), result[2], epsilon));
607 try expect(math.approxEqAbs(f32, @ceil(@as(f32, -0.4)), result[3], epsilon));
506608}
507609
508610test "@trunc" {
509611 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
510 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
511612 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
512613 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
513614 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
......@@ -527,15 +628,26 @@ fn testTrunc() !void {
527628 // var a: f80 = -3.5;
528629 // try expect(@trunc(a) == -3);
529630 // }
631}
530632
531 {
532 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };
533 var result = @trunc(v);
534 try expect(math.approxEqAbs(f32, @trunc(@as(f32, 1.1)), result[0], epsilon));
535 try expect(math.approxEqAbs(f32, @trunc(@as(f32, -2.2)), result[1], epsilon));
536 try expect(math.approxEqAbs(f32, @trunc(@as(f32, 0.3)), result[2], epsilon));
537 try expect(math.approxEqAbs(f32, @trunc(@as(f32, -0.4)), result[3], epsilon));
538 }
633test "@trunc with vectors" {
634 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
635 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
636 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
637 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
638 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
639
640 comptime try testTruncWithVectors();
641 try testTruncWithVectors();
642}
643
644fn testTruncWithVectors() !void {
645 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };
646 var result = @trunc(v);
647 try expect(math.approxEqAbs(f32, @trunc(@as(f32, 1.1)), result[0], epsilon));
648 try expect(math.approxEqAbs(f32, @trunc(@as(f32, -2.2)), result[1], epsilon));
649 try expect(math.approxEqAbs(f32, @trunc(@as(f32, 0.3)), result[2], epsilon));
650 try expect(math.approxEqAbs(f32, @trunc(@as(f32, -0.4)), result[3], epsilon));
539651}
540652
541653test "negation f16" {