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" {...@@ -99,7 +99,6 @@ test "negative f128 floatToInt at compile-time" {
9999
100test "@sqrt" {100test "@sqrt" {
101 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO101 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
102 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
103 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO102 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
104 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO103 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
105 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO104 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -115,15 +114,6 @@ fn testSqrt() !void {...@@ -115,15 +114,6 @@ fn testSqrt() !void {
115 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 1.1)), 1.0488088481701516, epsilon));114 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 1.1)), 1.0488088481701516, epsilon));
116 try expect(math.approxEqAbs(f32, @sqrt(@as(f32, 2.0)), 1.4142135623730950, epsilon));115 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
127 if (builtin.zig_backend == .stage1) {117 if (builtin.zig_backend == .stage1) {
128 if (has_f80_rt) {118 if (has_f80_rt) {
129 // TODO https://github.com/ziglang/zig/issues/10875119 // TODO https://github.com/ziglang/zig/issues/10875
...@@ -145,6 +135,26 @@ fn testSqrt() !void {...@@ -145,6 +135,26 @@ fn testSqrt() !void {
145 }135 }
146}136}
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
148test "more @sqrt f16 tests" {158test "more @sqrt f16 tests" {
149 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO159 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
150 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO160 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
...@@ -176,7 +186,6 @@ test "@sin" {...@@ -176,7 +186,6 @@ test "@sin" {
176 return error.SkipZigTest;186 return error.SkipZigTest;
177 }187 }
178 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO188 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
179 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
180 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO189 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
181 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO190 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
182 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO191 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -193,15 +202,27 @@ fn testSin() !void {...@@ -193,15 +202,27 @@ fn testSin() !void {
193 try expect(math.approxEqAbs(ty, @sin(@as(ty, std.math.pi / 2.0)), 1, eps));202 try expect(math.approxEqAbs(ty, @sin(@as(ty, std.math.pi / 2.0)), 1, eps));
194 try expect(math.approxEqAbs(ty, @sin(@as(ty, std.math.pi / 4.0)), 0.7071067811865475, eps));203 try expect(math.approxEqAbs(ty, @sin(@as(ty, std.math.pi / 4.0)), 0.7071067811865475, eps));
195 }204 }
205}
196206
197 {207test "@sin with vectors" {
198 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 };208 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
199 var result = @sin(v);209 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
200 try expect(math.approxEqAbs(f32, @sin(@as(f32, 1.1)), result[0], epsilon));210 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
201 try expect(math.approxEqAbs(f32, @sin(@as(f32, 2.2)), result[1], epsilon));211 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
202 try expect(math.approxEqAbs(f32, @sin(@as(f32, 3.3)), result[2], epsilon));212 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
203 try expect(math.approxEqAbs(f32, @sin(@as(f32, 4.4)), result[3], epsilon));213 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
204 }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));
205}226}
206227
207test "@cos" {228test "@cos" {
...@@ -210,7 +231,6 @@ test "@cos" {...@@ -210,7 +231,6 @@ test "@cos" {
210 return error.SkipZigTest;231 return error.SkipZigTest;
211 }232 }
212 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO233 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
213 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
214 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO234 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
215 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO235 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
216 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO236 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -227,20 +247,31 @@ fn testCos() !void {...@@ -227,20 +247,31 @@ fn testCos() !void {
227 try expect(math.approxEqAbs(ty, @cos(@as(ty, std.math.pi / 2.0)), 0, eps));247 try expect(math.approxEqAbs(ty, @cos(@as(ty, std.math.pi / 2.0)), 0, eps));
228 try expect(math.approxEqAbs(ty, @cos(@as(ty, std.math.pi / 4.0)), 0.7071067811865475, eps));248 try expect(math.approxEqAbs(ty, @cos(@as(ty, std.math.pi / 4.0)), 0.7071067811865475, eps));
229 }249 }
250}
230251
231 {252test "@cos with vectors" {
232 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 };253 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
233 var result = @cos(v);254 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
234 try expect(math.approxEqAbs(f32, @cos(@as(f32, 1.1)), result[0], epsilon));255 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
235 try expect(math.approxEqAbs(f32, @cos(@as(f32, 2.2)), result[1], epsilon));256 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
236 try expect(math.approxEqAbs(f32, @cos(@as(f32, 3.3)), result[2], epsilon));257 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
237 try expect(math.approxEqAbs(f32, @cos(@as(f32, 4.4)), result[3], epsilon));258 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
238 }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));
239}271}
240272
241test "@exp" {273test "@exp" {
242 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO274 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
243 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
244 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO275 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
245 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO276 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
246 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO277 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -256,20 +287,30 @@ fn testExp() !void {...@@ -256,20 +287,30 @@ fn testExp() !void {
256 try expect(math.approxEqAbs(ty, @exp(@as(ty, 2)), 7.389056098930650, eps));287 try expect(math.approxEqAbs(ty, @exp(@as(ty, 2)), 7.389056098930650, eps));
257 try expect(math.approxEqAbs(ty, @exp(@as(ty, 5)), 148.4131591025766, eps));288 try expect(math.approxEqAbs(ty, @exp(@as(ty, 5)), 148.4131591025766, eps));
258 }289 }
290}
259291
260 {292test "@exp with vectors" {
261 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };293 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
262 var result = @exp(v);294 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
263 try expect(math.approxEqAbs(f32, @exp(@as(f32, 1.1)), result[0], epsilon));295 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
264 try expect(math.approxEqAbs(f32, @exp(@as(f32, 2.2)), result[1], epsilon));296 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
265 try expect(math.approxEqAbs(f32, @exp(@as(f32, 0.3)), result[2], epsilon));297 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
266 try expect(math.approxEqAbs(f32, @exp(@as(f32, 0.4)), result[3], epsilon));298
267 }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));
268}310}
269311
270test "@exp2" {312test "@exp2" {
271 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO313 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
272 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
273 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO314 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
274 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO315 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
275 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO316 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -285,15 +326,26 @@ fn testExp2() !void {...@@ -285,15 +326,26 @@ fn testExp2() !void {
285 try expect(math.approxEqAbs(ty, @exp2(@as(ty, 1.5)), 2.8284271247462, eps));326 try expect(math.approxEqAbs(ty, @exp2(@as(ty, 1.5)), 2.8284271247462, eps));
286 try expect(math.approxEqAbs(ty, @exp2(@as(ty, 4.5)), 22.627416997969, eps));327 try expect(math.approxEqAbs(ty, @exp2(@as(ty, 4.5)), 22.627416997969, eps));
287 }328 }
329}
288330
289 {331test "@exp2" {
290 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };332 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
291 var result = @exp2(v);333 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
292 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 1.1)), result[0], epsilon));334 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
293 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 2.2)), result[1], epsilon));335 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
294 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 0.3)), result[2], epsilon));336 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
295 try expect(math.approxEqAbs(f32, @exp2(@as(f32, 0.4)), result[3], epsilon));337
296 }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));
297}349}
298350
299test "@log" {351test "@log" {
...@@ -348,7 +400,6 @@ test "@log2" {...@@ -348,7 +400,6 @@ test "@log2" {
348 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO400 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
349 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO401 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
350 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO402 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
351 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
352403
353 comptime try testLog2();404 comptime try testLog2();
354 try testLog2();405 try testLog2();
...@@ -361,15 +412,26 @@ fn testLog2() !void {...@@ -361,15 +412,26 @@ fn testLog2() !void {
361 try expect(math.approxEqAbs(ty, @log2(@as(ty, 6)), 2.5849625007212, eps));412 try expect(math.approxEqAbs(ty, @log2(@as(ty, 6)), 2.5849625007212, eps));
362 try expect(math.approxEqAbs(ty, @log2(@as(ty, 10)), 3.3219280948874, eps));413 try expect(math.approxEqAbs(ty, @log2(@as(ty, 10)), 3.3219280948874, eps));
363 }414 }
415}
364416
365 {417test "@log2 with vectors" {
366 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };418 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
367 var result = @log2(v);419 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
368 try expect(@log2(@as(f32, 1.1)) == result[0]);420 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
369 try expect(@log2(@as(f32, 2.2)) == result[1]);421 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
370 try expect(@log2(@as(f32, 0.3)) == result[2]);422 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
371 try expect(@log2(@as(f32, 0.4)) == result[3]);423
372 }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]);
373}435}
374436
375test "@log10" {437test "@log10" {
...@@ -377,7 +439,6 @@ test "@log10" {...@@ -377,7 +439,6 @@ test "@log10" {
377 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO439 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
378 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO440 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
379 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO441 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
380 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
381442
382 comptime try testLog10();443 comptime try testLog10();
383 try testLog10();444 try testLog10();
...@@ -390,20 +451,30 @@ fn testLog10() !void {...@@ -390,20 +451,30 @@ fn testLog10() !void {
390 try expect(math.approxEqAbs(ty, @log10(@as(ty, 15)), 1.176091259056, eps));451 try expect(math.approxEqAbs(ty, @log10(@as(ty, 15)), 1.176091259056, eps));
391 try expect(math.approxEqAbs(ty, @log10(@as(ty, 50)), 1.698970004336, eps));452 try expect(math.approxEqAbs(ty, @log10(@as(ty, 50)), 1.698970004336, eps));
392 }453 }
454}
393455
394 {456test "@log10 with vectors" {
395 var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 };457 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
396 var result = @log10(v);458 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
397 try expect(@log10(@as(f32, 1.1)) == result[0]);459 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
398 try expect(@log10(@as(f32, 2.2)) == result[1]);460 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
399 try expect(@log10(@as(f32, 0.3)) == result[2]);461 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
400 try expect(@log10(@as(f32, 0.4)) == result[3]);462
401 }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]);
402}474}
403475
404test "@fabs" {476test "@fabs" {
405 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO477 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
406 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
407 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO478 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
408 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO479 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
409 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO480 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -428,20 +499,30 @@ fn testFabs() !void {...@@ -428,20 +499,30 @@ fn testFabs() !void {
428 // try expect(@fabs(a) == 2.5);499 // try expect(@fabs(a) == 2.5);
429 // try expect(@fabs(b) == 2.5);500 // try expect(@fabs(b) == 2.5);
430 // }501 // }
502}
431503
432 {504test "@fabs with vectors" {
433 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };505 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
434 var result = @fabs(v);506 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
435 try expect(math.approxEqAbs(f32, @fabs(@as(f32, 1.1)), result[0], epsilon));507 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
436 try expect(math.approxEqAbs(f32, @fabs(@as(f32, -2.2)), result[1], epsilon));508 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
437 try expect(math.approxEqAbs(f32, @fabs(@as(f32, 0.3)), result[2], epsilon));509 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
438 try expect(math.approxEqAbs(f32, @fabs(@as(f32, -0.4)), result[3], epsilon));510
439 }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));
440}522}
441523
442test "@floor" {524test "@floor" {
443 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO525 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
444 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
445 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO526 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
446 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO527 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
447 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO528 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -461,20 +542,30 @@ fn testFloor() !void {...@@ -461,20 +542,30 @@ fn testFloor() !void {
461 // var a: f80 = 3.5;542 // var a: f80 = 3.5;
462 // try expect(@floor(a) == 3);543 // try expect(@floor(a) == 3);
463 // }544 // }
545}
464546
465 {547test "@floor with vectors" {
466 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };548 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
467 var result = @floor(v);549 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
468 try expect(math.approxEqAbs(f32, @floor(@as(f32, 1.1)), result[0], epsilon));550 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
469 try expect(math.approxEqAbs(f32, @floor(@as(f32, -2.2)), result[1], epsilon));551 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
470 try expect(math.approxEqAbs(f32, @floor(@as(f32, 0.3)), result[2], epsilon));552 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
471 try expect(math.approxEqAbs(f32, @floor(@as(f32, -0.4)), result[3], epsilon));553
472 }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));
473}565}
474566
475test "@ceil" {567test "@ceil" {
476 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO568 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
477 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
478 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO569 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
479 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO570 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
480 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO571 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -494,20 +585,30 @@ fn testCeil() !void {...@@ -494,20 +585,30 @@ fn testCeil() !void {
494 // var a: f80 = 3.5;585 // var a: f80 = 3.5;
495 // try expect(@ceil(a) == 4);586 // try expect(@ceil(a) == 4);
496 // }587 // }
588}
497589
498 {590test "@ceil with vectors" {
499 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };591 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
500 var result = @ceil(v);592 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
501 try expect(math.approxEqAbs(f32, @ceil(@as(f32, 1.1)), result[0], epsilon));593 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
502 try expect(math.approxEqAbs(f32, @ceil(@as(f32, -2.2)), result[1], epsilon));594 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
503 try expect(math.approxEqAbs(f32, @ceil(@as(f32, 0.3)), result[2], epsilon));595 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
504 try expect(math.approxEqAbs(f32, @ceil(@as(f32, -0.4)), result[3], epsilon));596
505 }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));
506}608}
507609
508test "@trunc" {610test "@trunc" {
509 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO611 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
510 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
511 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO612 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
512 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO613 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
513 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO614 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
...@@ -527,15 +628,26 @@ fn testTrunc() !void {...@@ -527,15 +628,26 @@ fn testTrunc() !void {
527 // var a: f80 = -3.5;628 // var a: f80 = -3.5;
528 // try expect(@trunc(a) == -3);629 // try expect(@trunc(a) == -3);
529 // }630 // }
631}
530632
531 {633test "@trunc with vectors" {
532 var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 };634 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
533 var result = @trunc(v);635 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
534 try expect(math.approxEqAbs(f32, @trunc(@as(f32, 1.1)), result[0], epsilon));636 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
535 try expect(math.approxEqAbs(f32, @trunc(@as(f32, -2.2)), result[1], epsilon));637 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
536 try expect(math.approxEqAbs(f32, @trunc(@as(f32, 0.3)), result[2], epsilon));638 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
537 try expect(math.approxEqAbs(f32, @trunc(@as(f32, -0.4)), result[3], epsilon));639
538 }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));
539}651}
540652
541test "negation f16" {653test "negation f16" {