fix #12332 (#12402) [backport]

This commit is contained in:
Arne Döring 2019-10-10 14:35:26 +02:00 • committed by Andreas Rumpf
commit 0a29c05a1b

View file

@ -436,7 +436,7 @@ proc divMod*(dividend, divisor: Int128): tuple[quotient, remainder: Int128] =
result.quotient = -quotient result.quotient = -quotient
else: else:
result.quotient = quotient result.quotient = quotient
if isNegativeB: if isNegativeA:
result.remainder = -dividend result.remainder = -dividend
else: else:
result.remainder = dividend result.remainder = dividend
@ -676,3 +676,12 @@ when isMainModule:
doAssert $high(Int128) == "170141183460469231731687303715884105727" doAssert $high(Int128) == "170141183460469231731687303715884105727"
doAssert $low(Int128) == "-170141183460469231731687303715884105728" doAssert $low(Int128) == "-170141183460469231731687303715884105728"
var ma = 100'i64
var mb = 13
# sign correctness
doAssert divMod(toInt128( ma),toInt128( mb)) == (toInt128( ma div mb), toInt128( ma mod mb))
doAssert divMod(toInt128(-ma),toInt128( mb)) == (toInt128(-ma div mb), toInt128(-ma mod mb))
doAssert divMod(toInt128( ma),toInt128(-mb)) == (toInt128( ma div -mb), toInt128( ma mod -mb))
doAssert divMod(toInt128(-ma),toInt128(-mb)) == (toInt128(-ma div -mb), toInt128(-ma mod -mb))