diff options
Diffstat (limited to 'test/behavior/math.zig')
| -rw-r--r-- | test/behavior/math.zig | 202 |
1 files changed, 129 insertions, 73 deletions
diff --git a/test/behavior/math.zig b/test/behavior/math.zig index 942d5f8ca7..0479015eee 100644 --- a/test/behavior/math.zig +++ b/test/behavior/math.zig @@ -910,32 +910,52 @@ test "comptime float rem int" { } test "remainder division" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO comptime try remdiv(f16); comptime try remdiv(f32); comptime try remdiv(f64); + comptime try remdiv(f80); comptime try remdiv(f128); try remdiv(f16); try remdiv(f64); + try remdiv(f80); try remdiv(f128); } fn remdiv(comptime T: type) !void { try expect(@as(T, 1) == @as(T, 1) % @as(T, 2)); + try remdivOne(T, 1, 1, 2); + try expect(@as(T, 1) == @as(T, 7) % @as(T, 3)); + try remdivOne(T, 1, 7, 3); +} + +fn remdivOne(comptime T: type, a: T, b: T, c: T) !void { + try expect(a == @rem(b, c)); + try expect(a == @mod(b, c)); } test "float remainder division using @rem" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO comptime try frem(f16); comptime try frem(f32); comptime try frem(f64); + comptime try frem(f80); comptime try frem(f128); try frem(f16); try frem(f32); try frem(f64); + try frem(f80); try frem(f128); } @@ -944,29 +964,40 @@ fn frem(comptime T: type) !void { f16 => 1.0, f32 => 0.001, f64 => 0.00001, + f80 => 0.000001, f128 => 0.0000001, else => unreachable, }; - try expect(@fabs(@rem(@as(T, 6.9), @as(T, 4.0)) - @as(T, 2.9)) < epsilon); - try expect(@fabs(@rem(@as(T, -6.9), @as(T, 4.0)) - @as(T, -2.9)) < epsilon); - try expect(@fabs(@rem(@as(T, -5.0), @as(T, 3.0)) - @as(T, -2.0)) < epsilon); - try expect(@fabs(@rem(@as(T, 3.0), @as(T, 2.0)) - @as(T, 1.0)) < epsilon); - try expect(@fabs(@rem(@as(T, 1.0), @as(T, 2.0)) - @as(T, 1.0)) < epsilon); - try expect(@fabs(@rem(@as(T, 0.0), @as(T, 1.0)) - @as(T, 0.0)) < epsilon); - try expect(@fabs(@rem(@as(T, -0.0), @as(T, 1.0)) - @as(T, -0.0)) < epsilon); + try fremOne(T, 6.9, 4.0, 2.9, epsilon); + try fremOne(T, -6.9, 4.0, -2.9, epsilon); + try fremOne(T, -5.0, 3.0, -2.0, epsilon); + try fremOne(T, 3.0, 2.0, 1.0, epsilon); + try fremOne(T, 1.0, 2.0, 1.0, epsilon); + try fremOne(T, 0.0, 1.0, 0.0, epsilon); + try fremOne(T, -0.0, 1.0, -0.0, epsilon); +} + +fn fremOne(comptime T: type, a: T, b: T, c: T, epsilon: T) !void { + try expect(@fabs(@rem(a, b) - c) < epsilon); } test "float modulo division using @mod" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO comptime try fmod(f16); comptime try fmod(f32); comptime try fmod(f64); + comptime try fmod(f80); comptime try fmod(f128); try fmod(f16); try fmod(f32); try fmod(f64); + try fmod(f80); try fmod(f128); } @@ -975,17 +1006,22 @@ fn fmod(comptime T: type) !void { f16 => 1.0, f32 => 0.001, f64 => 0.00001, + f80 => 0.000001, f128 => 0.0000001, else => unreachable, }; - try expect(@fabs(@mod(@as(T, 6.9), @as(T, 4.0)) - @as(T, 2.9)) < epsilon); - try expect(@fabs(@mod(@as(T, -6.9), @as(T, 4.0)) - @as(T, 1.1)) < epsilon); - try expect(@fabs(@mod(@as(T, -5.0), @as(T, 3.0)) - @as(T, 1.0)) < epsilon); - try expect(@fabs(@mod(@as(T, 3.0), @as(T, 2.0)) - @as(T, 1.0)) < epsilon); - try expect(@fabs(@mod(@as(T, 1.0), @as(T, 2.0)) - @as(T, 1.0)) < epsilon); - try expect(@fabs(@mod(@as(T, 0.0), @as(T, 1.0)) - @as(T, 0.0)) < epsilon); - try expect(@fabs(@mod(@as(T, -0.0), @as(T, 1.0)) - @as(T, -0.0)) < epsilon); + try fmodOne(T, 6.9, 4.0, 2.9, epsilon); + try fmodOne(T, -6.9, 4.0, 1.1, epsilon); + try fmodOne(T, -5.0, 3.0, 1.0, epsilon); + try fmodOne(T, 3.0, 2.0, 1.0, epsilon); + try fmodOne(T, 1.0, 2.0, 1.0, epsilon); + try fmodOne(T, 0.0, 1.0, 0.0, epsilon); + try fmodOne(T, -0.0, 1.0, -0.0, epsilon); +} + +fn fmodOne(comptime T: type, a: T, b: T, c: T, epsilon: T) !void { + try expect(@fabs(@mod(@as(T, a), @as(T, b)) - @as(T, c)) < epsilon); } test "@sqrt" { @@ -1037,10 +1073,11 @@ test "@fabs" { } test "@fabs f80" { - if (true) { - // https://github.com/ziglang/zig/issues/11030 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO try testFabs(f80, 12.0); comptime try testFabs(f80, 12.0); @@ -1053,7 +1090,11 @@ fn testFabs(comptime T: type, x: T) !void { } test "@floor" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO try testFloor(f64, 12.0); comptime try testFloor(f64, 12.0); @@ -1069,23 +1110,24 @@ test "@floor" { } test "@floor f80" { - if (true) { - // https://github.com/ziglang/zig/issues/11030 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + try testFloor(f80, 12.0); comptime try testFloor(f80, 12.0); } test "@floor f128" { - if (builtin.zig_backend == .stage1) { - // Fails because it incorrectly lowers to a floorl function call. - return error.SkipZigTest; - } - - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO - testFloor(f128, 12.0); + try testFloor(f128, 12.0); comptime try testFloor(f128, 12.0); } @@ -1096,7 +1138,11 @@ fn testFloor(comptime T: type, x: T) !void { } test "@ceil" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO try testCeil(f64, 12.0); comptime try testCeil(f64, 12.0); @@ -1112,24 +1158,24 @@ test "@ceil" { } test "@ceil f80" { - if (true) { - // https://github.com/ziglang/zig/issues/11030 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO try testCeil(f80, 12.0); comptime try testCeil(f80, 12.0); } test "@ceil f128" { - if (builtin.zig_backend == .stage1) { - // Fails because it incorrectly lowers to a ceill function call. - return error.SkipZigTest; - } - - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO - testCeil(f128, 12.0); + try testCeil(f128, 12.0); comptime try testCeil(f128, 12.0); } @@ -1140,7 +1186,11 @@ fn testCeil(comptime T: type, x: T) !void { } test "@trunc" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO try testTrunc(f64, 12.0); comptime try testTrunc(f64, 12.0); @@ -1156,10 +1206,11 @@ test "@trunc" { } test "@trunc f80" { - if (true) { - // https://github.com/ziglang/zig/issues/11030 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO try testTrunc(f80, 12.0); comptime try testTrunc(f80, 12.0); @@ -1172,14 +1223,13 @@ test "@trunc f80" { } test "@trunc f128" { - if (builtin.zig_backend == .stage1) { - // Fails because it incorrectly lowers to a truncl function call. - return error.SkipZigTest; - } - - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO - testTrunc(f128, 12.0); + try testTrunc(f128, 12.0); comptime try testTrunc(f128, 12.0); } @@ -1198,7 +1248,11 @@ fn testTrunc(comptime T: type, x: T) !void { } test "@round" { - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO try testRound(f64, 12.0); comptime try testRound(f64, 12.0); @@ -1214,24 +1268,24 @@ test "@round" { } test "@round f80" { - if (true) { - // https://github.com/ziglang/zig/issues/11030 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO try testRound(f80, 12.0); comptime try testRound(f80, 12.0); } test "@round f128" { - if (builtin.zig_backend == .stage1) { - // Fails because it incorrectly lowers to a roundl function call. - return error.SkipZigTest; - } - - if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO - testRound(f128, 12.0); + try testRound(f128, 12.0); comptime try testRound(f128, 12.0); } @@ -1280,10 +1334,12 @@ test "NaN comparison" { } test "NaN comparison f80" { - if (true) { - // https://github.com/ziglang/zig/issues/11030 - return error.SkipZigTest; - } + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + 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_x86_64) return error.SkipZigTest; // TODO + try testNanEqNan(f80); comptime try testNanEqNan(f80); } |
