Fix issue 22771 - BigInt divMod can return "-0" (negative zero)

This commit is contained in:
dkorpel 2022-02-14 14:25:22 +01:00 committed by The Dlang Bot
parent 2629671c15
commit 1e30d05a3f

View file

@ -2244,7 +2244,7 @@ void divMod(const BigInt dividend, const BigInt divisor, out BigInt quotient, ou
BigUint.divMod(dividend.data, divisor.data, q, r); BigUint.divMod(dividend.data, divisor.data, q, r);
quotient.sign = dividend.sign != divisor.sign; quotient.sign = dividend.sign != divisor.sign;
quotient.data = q; quotient.data = q;
remainder.sign = dividend.sign; remainder.sign = r.isZero() ? false : dividend.sign;
remainder.data = r; remainder.data = r;
} }
@ -2291,6 +2291,14 @@ void divMod(const BigInt dividend, const BigInt divisor, out BigInt quotient, ou
assert(q * d + r == -c); assert(q * d + r == -c);
} }
// https://issues.dlang.org/show_bug.cgi?id=22771
@safe pure nothrow unittest
{
BigInt quotient, remainder;
divMod(BigInt(-50), BigInt(1), quotient, remainder);
assert(remainder == 0);
}
// https://issues.dlang.org/show_bug.cgi?id=19740 // https://issues.dlang.org/show_bug.cgi?id=19740
@safe unittest @safe unittest
{ {