aboutsummaryrefslogtreecommitdiff
path: root/test/behavior
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-09-30 22:11:51 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2023-10-01 15:09:52 -0400
commitfbe5bf469e17ffd57b34762fd0206587f5758a52 (patch)
treee657e3c79c1e9ea76daa7d388bdd55340ebc6d7d /test/behavior
parent1eb023908d50e601f68f2200c3cf126ca3035167 (diff)
downloadzig-fbe5bf469e17ffd57b34762fd0206587f5758a52.tar.gz
zig-fbe5bf469e17ffd57b34762fd0206587f5758a52.zip
x86_64: implement float arithmetic builtins
Diffstat (limited to 'test/behavior')
-rw-r--r--test/behavior/floatop.zig107
-rw-r--r--test/behavior/math.zig3
2 files changed, 96 insertions, 14 deletions
diff --git a/test/behavior/floatop.zig b/test/behavior/floatop.zig
index 27a89f3d21..ab9859e08d 100644
--- a/test/behavior/floatop.zig
+++ b/test/behavior/floatop.zig
@@ -19,6 +19,99 @@ fn epsForType(comptime T: type) T {
};
}
+test "add f16" {
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
+
+ try testAdd(f16);
+ try comptime testAdd(f16);
+}
+
+test "add f32/f64" {
+ try testAdd(f32);
+ try comptime testAdd(f32);
+ try testAdd(f64);
+ try comptime testAdd(f64);
+}
+
+test "add f80/f128/c_longdouble" {
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
+
+ try testAdd(f80);
+ try comptime testAdd(f80);
+ try testAdd(f128);
+ try comptime testAdd(f128);
+ try testAdd(c_longdouble);
+ try comptime testAdd(c_longdouble);
+}
+
+fn testAdd(comptime T: type) !void {
+ var one_point_two_five: T = 1.25;
+ var two_point_seven_five: T = 2.75;
+ try expect(one_point_two_five + two_point_seven_five == 4);
+}
+
+test "sub f16" {
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
+
+ try testSub(f16);
+ try comptime testSub(f16);
+}
+
+test "sub f32/f64" {
+ try testSub(f32);
+ try comptime testSub(f32);
+ try testSub(f64);
+ try comptime testSub(f64);
+}
+
+test "sub f80/f128/c_longdouble" {
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
+
+ try testSub(f80);
+ try comptime testSub(f80);
+ try testSub(f128);
+ try comptime testSub(f128);
+ try testSub(c_longdouble);
+ try comptime testSub(c_longdouble);
+}
+
+fn testSub(comptime T: type) !void {
+ var one_point_two_five: T = 1.25;
+ var two_point_seven_five: T = 2.75;
+ try expect(one_point_two_five - two_point_seven_five == -1.5);
+}
+
+test "mul f16" {
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
+
+ try testMul(f16);
+ try comptime testMul(f16);
+}
+
+test "mul f32/f64" {
+ try testMul(f32);
+ try comptime testMul(f32);
+ try testMul(f64);
+ try comptime testMul(f64);
+}
+
+test "mul f80/f128/c_longdouble" {
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
+
+ try testMul(f80);
+ try comptime testMul(f80);
+ try testMul(f128);
+ try comptime testMul(f128);
+ try testMul(c_longdouble);
+ try comptime testMul(c_longdouble);
+}
+
+fn testMul(comptime T: type) !void {
+ var one_point_two_five: T = 1.25;
+ var two_point_seven_five: T = 2.75;
+ try expect(one_point_two_five * two_point_seven_five == 3.4375);
+}
+
test "cmp f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
@@ -216,7 +309,7 @@ test "more @sqrt f16 tests" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
// TODO these are not all passing at comptime
try expect(@sqrt(@as(f16, 0.0)) == 0.0);
@@ -269,7 +362,6 @@ test "@sin f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
try testSin(f16);
try comptime testSin(f16);
@@ -339,7 +431,6 @@ test "@cos f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
try testCos(f16);
try comptime testCos(f16);
@@ -409,7 +500,6 @@ test "@tan f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
try testTan(f16);
try comptime testTan(f16);
@@ -479,7 +569,6 @@ test "@exp f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
try testExp(f16);
try comptime testExp(f16);
@@ -549,7 +638,6 @@ test "@exp2 f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
try testExp2(f16);
try comptime testExp2(f16);
@@ -619,7 +707,6 @@ test "@log f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
try testLog(f16);
try comptime testLog(f16);
@@ -687,7 +774,6 @@ test "@log2 f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
try testLog2(f16);
try comptime testLog2(f16);
@@ -761,7 +847,6 @@ test "@log10 f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
try testLog10(f16);
try comptime testLog10(f16);
@@ -829,7 +914,7 @@ test "@abs f16" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
try testFabs(f16);
try comptime testFabs(f16);
@@ -1186,7 +1271,7 @@ test "neg f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
if (builtin.os.tag == .freebsd) {
// TODO file issue to track this failure
diff --git a/test/behavior/math.zig b/test/behavior/math.zig
index 801aa2aeaa..91ba47e329 100644
--- a/test/behavior/math.zig
+++ b/test/behavior/math.zig
@@ -7,8 +7,6 @@ const maxInt = std.math.maxInt;
const minInt = std.math.minInt;
const mem = std.mem;
const math = std.math;
-const no_x86_64_hardware_f16_support = builtin.zig_backend == .stage2_x86_64 and
- !std.Target.x86.featureSetHas(builtin.cpu.features, .f16c);
test "assignment operators" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
@@ -1444,7 +1442,6 @@ test "@round f16" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
- if (no_x86_64_hardware_f16_support) return error.SkipZigTest; // TODO
try testRound(f16, 12.0);
try comptime testRound(f16, 12.0);