| ... | ... | @@ -523,7 +523,7 @@ fn testLog10WithVectors() !void { |
| 523 | 523 | try expect(@log10(@as(f32, 0.4)) == result[3]); |
| 524 | 524 | } |
| 525 | 525 | |
| 526 | | test "@fabs" { |
| 526 | test "@abs" { |
| 527 | 527 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 528 | 528 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 529 | 529 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -533,24 +533,24 @@ test "@fabs" { |
| 533 | 533 | } |
| 534 | 534 | |
| 535 | 535 | fn testFabs() !void { |
| 536 | | try expect(@fabs(@as(f16, -2.5)) == 2.5); |
| 537 | | try expect(@fabs(@as(f16, 2.5)) == 2.5); |
| 538 | | try expect(@fabs(@as(f32, -2.5)) == 2.5); |
| 539 | | try expect(@fabs(@as(f32, 2.5)) == 2.5); |
| 540 | | try expect(@fabs(@as(f64, -2.5)) == 2.5); |
| 541 | | try expect(@fabs(@as(f64, 2.5)) == 2.5); |
| 536 | try expect(@abs(@as(f16, -2.5)) == 2.5); |
| 537 | try expect(@abs(@as(f16, 2.5)) == 2.5); |
| 538 | try expect(@abs(@as(f32, -2.5)) == 2.5); |
| 539 | try expect(@abs(@as(f32, 2.5)) == 2.5); |
| 540 | try expect(@abs(@as(f64, -2.5)) == 2.5); |
| 541 | try expect(@abs(@as(f64, 2.5)) == 2.5); |
| 542 | 542 | |
| 543 | 543 | // TODO test f128, and c_longdouble |
| 544 | 544 | // https://github.com/ziglang/zig/issues/4026 |
| 545 | 545 | // { |
| 546 | 546 | // var a: f80 = -2.5; |
| 547 | 547 | // var b: f80 = 2.5; |
| 548 | | // try expect(@fabs(a) == 2.5); |
| 549 | | // try expect(@fabs(b) == 2.5); |
| 548 | // try expect(@abs(a) == 2.5); |
| 549 | // try expect(@abs(b) == 2.5); |
| 550 | 550 | // } |
| 551 | 551 | } |
| 552 | 552 | |
| 553 | | test "@fabs with vectors" { |
| 553 | test "@abs with vectors" { |
| 554 | 554 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 555 | 555 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 556 | 556 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -562,14 +562,15 @@ test "@fabs with vectors" { |
| 562 | 562 | |
| 563 | 563 | fn testFabsWithVectors() !void { |
| 564 | 564 | var v: @Vector(4, f32) = [_]f32{ 1.1, -2.2, 0.3, -0.4 }; |
| 565 | | var result = @fabs(v); |
| 566 | | try expect(math.approxEqAbs(f32, @fabs(@as(f32, 1.1)), result[0], epsilon)); |
| 567 | | try expect(math.approxEqAbs(f32, @fabs(@as(f32, -2.2)), result[1], epsilon)); |
| 568 | | try expect(math.approxEqAbs(f32, @fabs(@as(f32, 0.3)), result[2], epsilon)); |
| 569 | | try expect(math.approxEqAbs(f32, @fabs(@as(f32, -0.4)), result[3], epsilon)); |
| 565 | var result = @abs(v); |
| 566 | try expect(math.approxEqAbs(f32, @abs(@as(f32, 1.1)), result[0], epsilon)); |
| 567 | try expect(math.approxEqAbs(f32, @abs(@as(f32, -2.2)), result[1], epsilon)); |
| 568 | try expect(math.approxEqAbs(f32, @abs(@as(f32, 0.3)), result[2], epsilon)); |
| 569 | try expect(math.approxEqAbs(f32, @abs(@as(f32, -0.4)), result[3], epsilon)); |
| 570 | 570 | } |
| 571 | 571 | |
| 572 | | test "another, possibly redundant, @fabs test" { |
| 572 | test "another, possibly redundant, @abs test" { |
| 573 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 573 | 574 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 574 | 575 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 575 | 576 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -587,11 +588,12 @@ test "another, possibly redundant, @fabs test" { |
| 587 | 588 | |
| 588 | 589 | const x = 14.0; |
| 589 | 590 | const y = -x; |
| 590 | | const z = @fabs(y); |
| 591 | const z = @abs(y); |
| 591 | 592 | try comptime std.testing.expectEqual(x, z); |
| 592 | 593 | } |
| 593 | 594 | |
| 594 | | test "@fabs f80" { |
| 595 | test "@abs f80" { |
| 596 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 595 | 597 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 596 | 598 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 597 | 599 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -604,11 +606,12 @@ test "@fabs f80" { |
| 604 | 606 | |
| 605 | 607 | fn testFabsLegacy(comptime T: type, x: T) !void { |
| 606 | 608 | const y = -x; |
| 607 | | const z = @fabs(y); |
| 609 | const z = @abs(y); |
| 608 | 610 | try expect(x == z); |
| 609 | 611 | } |
| 610 | 612 | |
| 611 | | test "a third @fabs test, surely there should not be three fabs tests" { |
| 613 | test "a third @abs test, surely there should not be three fabs tests" { |
| 614 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 612 | 615 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 613 | 616 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 614 | 617 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| ... | ... | @@ -617,23 +620,23 @@ test "a third @fabs test, surely there should not be three fabs tests" { |
| 617 | 620 | |
| 618 | 621 | inline for ([_]type{ f16, f32, f64, f80, f128, c_longdouble }) |T| { |
| 619 | 622 | // normals |
| 620 | | try expect(@fabs(@as(T, 1.0)) == 1.0); |
| 621 | | try expect(@fabs(@as(T, -1.0)) == 1.0); |
| 622 | | try expect(@fabs(math.floatMin(T)) == math.floatMin(T)); |
| 623 | | try expect(@fabs(-math.floatMin(T)) == math.floatMin(T)); |
| 624 | | try expect(@fabs(math.floatMax(T)) == math.floatMax(T)); |
| 625 | | try expect(@fabs(-math.floatMax(T)) == math.floatMax(T)); |
| 623 | try expect(@abs(@as(T, 1.0)) == 1.0); |
| 624 | try expect(@abs(@as(T, -1.0)) == 1.0); |
| 625 | try expect(@abs(math.floatMin(T)) == math.floatMin(T)); |
| 626 | try expect(@abs(-math.floatMin(T)) == math.floatMin(T)); |
| 627 | try expect(@abs(math.floatMax(T)) == math.floatMax(T)); |
| 628 | try expect(@abs(-math.floatMax(T)) == math.floatMax(T)); |
| 626 | 629 | |
| 627 | 630 | // subnormals |
| 628 | | try expect(@fabs(@as(T, 0.0)) == 0.0); |
| 629 | | try expect(@fabs(@as(T, -0.0)) == 0.0); |
| 630 | | try expect(@fabs(math.floatTrueMin(T)) == math.floatTrueMin(T)); |
| 631 | | try expect(@fabs(-math.floatTrueMin(T)) == math.floatTrueMin(T)); |
| 631 | try expect(@abs(@as(T, 0.0)) == 0.0); |
| 632 | try expect(@abs(@as(T, -0.0)) == 0.0); |
| 633 | try expect(@abs(math.floatTrueMin(T)) == math.floatTrueMin(T)); |
| 634 | try expect(@abs(-math.floatTrueMin(T)) == math.floatTrueMin(T)); |
| 632 | 635 | |
| 633 | 636 | // non-finite numbers |
| 634 | | try expect(math.isPositiveInf(@fabs(math.inf(T)))); |
| 635 | | try expect(math.isPositiveInf(@fabs(-math.inf(T)))); |
| 636 | | try expect(math.isNan(@fabs(math.nan(T)))); |
| 637 | try expect(math.isPositiveInf(@abs(math.inf(T)))); |
| 638 | try expect(math.isPositiveInf(@abs(-math.inf(T)))); |
| 639 | try expect(math.isNan(@abs(math.nan(T)))); |
| 637 | 640 | } |
| 638 | 641 | } |
| 639 | 642 | |