| ... | @@ -99,7 +99,6 @@ test "negative f128 floatToInt at compile-time" { | ... | @@ -99,7 +99,6 @@ test "negative f128 floatToInt at compile-time" { |
| 99 | | 99 | |
| 100 | test "@sqrt" { | 100 | test "@sqrt" { |
| 101 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 101 | 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; // TODO | 102 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 104 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 103 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 105 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 104 | 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)); |
| 117 | | 116 | |
| 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/10875 | 119 | // 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 | } |
| 147 | | 137 | |
| | 138 | test "@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 | |
| | 149 | fn 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 | |
| 148 | test "more @sqrt f16 tests" { | 158 | test "more @sqrt f16 tests" { |
| 149 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 159 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 150 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 160 | 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; // TODO | 188 | 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; // TODO | 189 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 181 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 190 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 182 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 191 | 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 | } |
| 196 | | 206 | |
| 197 | { | 207 | test "@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 | |
| | 219 | fn 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 | } |
| 206 | | 227 | |
| 207 | test "@cos" { | 228 | test "@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; // TODO | 233 | 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; // TODO | 234 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 215 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 235 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 216 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 236 | 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 | } |
| 230 | | 251 | |
| 231 | { | 252 | test "@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 | |
| | 264 | fn 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 | } |
| 240 | | 272 | |
| 241 | test "@exp" { | 273 | test "@exp" { |
| 242 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 274 | 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; // TODO | 275 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 245 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 276 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 246 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 277 | 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 | } |
| 259 | | 291 | |
| 260 | { | 292 | test "@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 | |
| | 303 | fn 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 | } |
| 269 | | 311 | |
| 270 | test "@exp2" { | 312 | test "@exp2" { |
| 271 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 313 | 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; // TODO | 314 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 274 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 315 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 275 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 316 | 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 | } |
| 288 | | 330 | |
| 289 | { | 331 | test "@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 | |
| | 342 | fn 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 | } |
| 298 | | 350 | |
| 299 | test "@log" { | 351 | test "@log" { |
| ... | @@ -348,7 +400,6 @@ test "@log2" { | ... | @@ -348,7 +400,6 @@ test "@log2" { |
| 348 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 400 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 349 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 401 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 350 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 402 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 351 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | | |
| 352 | | 403 | |
| 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 | } |
| 364 | | 416 | |
| 365 | { | 417 | test "@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 | |
| | 428 | fn 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 | } |
| 374 | | 436 | |
| 375 | test "@log10" { | 437 | test "@log10" { |
| ... | @@ -377,7 +439,6 @@ test "@log10" { | ... | @@ -377,7 +439,6 @@ test "@log10" { |
| 377 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 439 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 378 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 440 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 379 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 441 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 380 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | | |
| 381 | | 442 | |
| 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 | } |
| 393 | | 455 | |
| 394 | { | 456 | test "@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 | |
| | 467 | fn 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 | } |
| 403 | | 475 | |
| 404 | test "@fabs" { | 476 | test "@fabs" { |
| 405 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 477 | 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; // TODO | 478 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 408 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 479 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 409 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 480 | 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 | } |
| 431 | | 503 | |
| 432 | { | 504 | test "@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 | |
| | 515 | fn 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 | } |
| 441 | | 523 | |
| 442 | test "@floor" { | 524 | test "@floor" { |
| 443 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 525 | 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; // TODO | 526 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 446 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 527 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 447 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 528 | 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 | } |
| 464 | | 546 | |
| 465 | { | 547 | test "@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 | |
| | 558 | fn 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 | } |
| 474 | | 566 | |
| 475 | test "@ceil" { | 567 | test "@ceil" { |
| 476 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 568 | 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; // TODO | 569 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 479 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 570 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 480 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 571 | 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 | } |
| 497 | | 589 | |
| 498 | { | 590 | test "@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 | |
| | 601 | fn 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 | } |
| 507 | | 609 | |
| 508 | test "@trunc" { | 610 | test "@trunc" { |
| 509 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 611 | 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; // TODO | 612 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 512 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 613 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 513 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 614 | 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 | } |
| 530 | | 632 | |
| 531 | { | 633 | test "@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 | |
| | 644 | fn 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 | } |
| 540 | | 652 | |
| 541 | test "negation f16" { | 653 | test "negation f16" { |