From 95e150ca09a27c6d262234f4b7c05fbbed1f19b0 Mon Sep 17 00:00:00 2001 From: Ratakor Date: Mon, 21 Oct 2024 09:49:09 +0200 Subject: [PATCH] Revert std.math.divCeil for CI tests --- lib/std/math.zig | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/std/math.zig b/lib/std/math.zig index 069b413bae1e..c254b0d99b87 100644 --- a/lib/std/math.zig +++ b/lib/std/math.zig @@ -895,10 +895,24 @@ fn testDivFloor() !void { /// infinity. Returns an error on overflow or when denominator is /// zero. pub fn divCeil(comptime T: type, numerator: T, denominator: T) !T { + // TODO: replace with @divCeil @setRuntimeSafety(false); if (denominator == 0) return error.DivisionByZero; - if (@typeInfo(T) == .int and @typeInfo(T).int.signedness == .signed and numerator == minInt(T) and denominator == -1) return error.Overflow; - return @divCeil(numerator, denominator); + const info = @typeInfo(T); + switch (info) { + .comptime_float, .float => return @ceil(numerator / denominator), + .comptime_int, .int => { + if (numerator < 0 and denominator < 0) { + if (info == .int and numerator == minInt(T) and denominator == -1) + return error.Overflow; + return @divFloor(numerator + 1, denominator) + 1; + } + if (numerator > 0 and denominator > 0) + return @divFloor(numerator - 1, denominator) + 1; + return @divTrunc(numerator, denominator); + }, + else => @compileError("divCeil unsupported on " ++ @typeName(T)), + } } test divCeil {