| ... | ... | @@ -36,7 +36,7 @@ fn testSqrt() void { |
| 36 | 36 | // expect(@sqrt(a) == 7); |
| 37 | 37 | //} |
| 38 | 38 | { |
| 39 | | var v: @Vector(4, f32) = [_]f32{1.1, 2.2, 3.3, 4.4}; |
| 39 | var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 }; |
| 40 | 40 | var result = @sqrt(v); |
| 41 | 41 | expect(math.approxEq(f32, @sqrt(@as(f32, 1.1)), result[0], epsilon)); |
| 42 | 42 | expect(math.approxEq(f32, @sqrt(@as(f32, 2.2)), result[1], epsilon)); |
| ... | ... | @@ -86,7 +86,7 @@ fn testSin() void { |
| 86 | 86 | expect(@sin(a) == 0); |
| 87 | 87 | } |
| 88 | 88 | { |
| 89 | | var v: @Vector(4, f32) = [_]f32{1.1, 2.2, 3.3, 4.4}; |
| 89 | var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 }; |
| 90 | 90 | var result = @sin(v); |
| 91 | 91 | expect(math.approxEq(f32, @sin(@as(f32, 1.1)), result[0], epsilon)); |
| 92 | 92 | expect(math.approxEq(f32, @sin(@as(f32, 2.2)), result[1], epsilon)); |
| ... | ... | @@ -116,7 +116,7 @@ fn testCos() void { |
| 116 | 116 | expect(@cos(a) == 1); |
| 117 | 117 | } |
| 118 | 118 | { |
| 119 | | var v: @Vector(4, f32) = [_]f32{1.1, 2.2, 3.3, 4.4}; |
| 119 | var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 3.3, 4.4 }; |
| 120 | 120 | var result = @cos(v); |
| 121 | 121 | expect(math.approxEq(f32, @cos(@as(f32, 1.1)), result[0], epsilon)); |
| 122 | 122 | expect(math.approxEq(f32, @cos(@as(f32, 2.2)), result[1], epsilon)); |
| ... | ... | @@ -146,7 +146,7 @@ fn testExp() void { |
| 146 | 146 | expect(@exp(a) == 1); |
| 147 | 147 | } |
| 148 | 148 | { |
| 149 | | var v: @Vector(4, f32) = [_]f32{1.1, 2.2, 0.3, 0.4}; |
| 149 | var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 }; |
| 150 | 150 | var result = @exp(v); |
| 151 | 151 | expect(math.approxEq(f32, @exp(@as(f32, 1.1)), result[0], epsilon)); |
| 152 | 152 | expect(math.approxEq(f32, @exp(@as(f32, 2.2)), result[1], epsilon)); |
| ... | ... | @@ -176,7 +176,7 @@ fn testExp2() void { |
| 176 | 176 | expect(@exp2(a) == 4); |
| 177 | 177 | } |
| 178 | 178 | { |
| 179 | | var v: @Vector(4, f32) = [_]f32{1.1, 2.2, 0.3, 0.4}; |
| 179 | var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 }; |
| 180 | 180 | var result = @exp2(v); |
| 181 | 181 | expect(math.approxEq(f32, @exp2(@as(f32, 1.1)), result[0], epsilon)); |
| 182 | 182 | expect(math.approxEq(f32, @exp2(@as(f32, 2.2)), result[1], epsilon)); |
| ... | ... | @@ -208,7 +208,7 @@ fn testLog() void { |
| 208 | 208 | expect(@log(a) == 1 or @log(a) == @bitCast(f64, @as(u64, 0x3ff0000000000000))); |
| 209 | 209 | } |
| 210 | 210 | { |
| 211 | | var v: @Vector(4, f32) = [_]f32{1.1, 2.2, 0.3, 0.4}; |
| 211 | var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 }; |
| 212 | 212 | var result = @log(v); |
| 213 | 213 | expect(math.approxEq(f32, @log(@as(f32, 1.1)), result[0], epsilon)); |
| 214 | 214 | expect(math.approxEq(f32, @log(@as(f32, 2.2)), result[1], epsilon)); |
| ... | ... | @@ -238,7 +238,7 @@ fn testLog2() void { |
| 238 | 238 | expect(@log2(a) == 2); |
| 239 | 239 | } |
| 240 | 240 | { |
| 241 | | var v: @Vector(4, f32) = [_]f32{1.1, 2.2, 0.3, 0.4}; |
| 241 | var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 }; |
| 242 | 242 | var result = @log2(v); |
| 243 | 243 | expect(math.approxEq(f32, @log2(@as(f32, 1.1)), result[0], epsilon)); |
| 244 | 244 | expect(math.approxEq(f32, @log2(@as(f32, 2.2)), result[1], epsilon)); |
| ... | ... | @@ -268,7 +268,7 @@ fn testLog10() void { |
| 268 | 268 | expect(@log10(a) == 3); |
| 269 | 269 | } |
| 270 | 270 | { |
| 271 | | var v: @Vector(4, f32) = [_]f32{1.1, 2.2, 0.3, 0.4}; |
| 271 | var v: @Vector(4, f32) = [_]f32{ 1.1, 2.2, 0.3, 0.4 }; |
| 272 | 272 | var result = @log10(v); |
| 273 | 273 | expect(math.approxEq(f32, @log10(@as(f32, 1.1)), result[0], epsilon)); |
| 274 | 274 | expect(math.approxEq(f32, @log10(@as(f32, 2.2)), result[1], epsilon)); |
| ... | ... | @@ -304,7 +304,7 @@ fn testFabs() void { |
| 304 | 304 | expect(@fabs(b) == 2.5); |
| 305 | 305 | } |
| 306 | 306 | { |
| 307 | | var v: @Vector(4, f32) = [_]f32{1.1, -2.2, 0.3, -0.4}; |
| 307 | var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 }; |
| 308 | 308 | var result = @fabs(v); |
| 309 | 309 | expect(math.approxEq(f32, @fabs(@as(f32, 1.1)), result[0], epsilon)); |
| 310 | 310 | expect(math.approxEq(f32, @fabs(@as(f32, -2.2)), result[1], epsilon)); |
| ... | ... | @@ -334,7 +334,7 @@ fn testFloor() void { |
| 334 | 334 | expect(@floor(a) == 3); |
| 335 | 335 | } |
| 336 | 336 | { |
| 337 | | var v: @Vector(4, f32) = [_]f32{1.1, -2.2, 0.3, -0.4}; |
| 337 | var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 }; |
| 338 | 338 | var result = @floor(v); |
| 339 | 339 | expect(math.approxEq(f32, @floor(@as(f32, 1.1)), result[0], epsilon)); |
| 340 | 340 | expect(math.approxEq(f32, @floor(@as(f32, -2.2)), result[1], epsilon)); |
| ... | ... | @@ -364,7 +364,7 @@ fn testCeil() void { |
| 364 | 364 | expect(@ceil(a) == 4); |
| 365 | 365 | } |
| 366 | 366 | { |
| 367 | | var v: @Vector(4, f32) = [_]f32{1.1, -2.2, 0.3, -0.4}; |
| 367 | var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 }; |
| 368 | 368 | var result = @ceil(v); |
| 369 | 369 | expect(math.approxEq(f32, @ceil(@as(f32, 1.1)), result[0], epsilon)); |
| 370 | 370 | expect(math.approxEq(f32, @ceil(@as(f32, -2.2)), result[1], epsilon)); |
| ... | ... | @@ -394,7 +394,7 @@ fn testTrunc() void { |
| 394 | 394 | expect(@trunc(a) == -3); |
| 395 | 395 | } |
| 396 | 396 | { |
| 397 | | var v: @Vector(4, f32) = [_]f32{1.1, -2.2, 0.3, -0.4}; |
| 397 | var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 }; |
| 398 | 398 | var result = @trunc(v); |
| 399 | 399 | expect(math.approxEq(f32, @trunc(@as(f32, 1.1)), result[0], epsilon)); |
| 400 | 400 | expect(math.approxEq(f32, @trunc(@as(f32, -2.2)), result[1], epsilon)); |
| ... | ... | @@ -403,6 +403,36 @@ fn testTrunc() void { |
| 403 | 403 | } |
| 404 | 404 | } |
| 405 | 405 | |
| 406 | test "floating point comparisons" { |
| 407 | testFloatComparisons(); |
| 408 | comptime testFloatComparisons(); |
| 409 | } |
| 410 | |
| 411 | fn testFloatComparisons() void { |
| 412 | inline for ([_]type{ f16, f32, f64, f128 }) |ty| { |
| 413 | // No decimal part |
| 414 | { |
| 415 | const x: ty = 1.0; |
| 416 | expect(x == 1); |
| 417 | expect(x != 0); |
| 418 | expect(x > 0); |
| 419 | expect(x < 2); |
| 420 | expect(x >= 1); |
| 421 | expect(x <= 1); |
| 422 | } |
| 423 | // Non-zero decimal part |
| 424 | { |
| 425 | const x: ty = 1.5; |
| 426 | expect(x != 1); |
| 427 | expect(x != 2); |
| 428 | expect(x > 1); |
| 429 | expect(x < 2); |
| 430 | expect(x >= 1); |
| 431 | expect(x <= 2); |
| 432 | } |
| 433 | } |
| 434 | } |
| 435 | |
| 406 | 436 | // TODO This is waiting on library support for the Windows build (not sure why the other's don't need it) |
| 407 | 437 | //test "@nearbyint" { |
| 408 | 438 | // comptime testNearbyInt(); |