Skip to content

Commit 665ce4c

Browse files
committed
Fix lua modulo
1 parent 6581935 commit 665ce4c

3 files changed

Lines changed: 19 additions & 2 deletions

File tree

_glua-tests/issues.lua

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,3 +387,20 @@ function test()
387387
assert(a == 1 and b == nil and c == nil)
388388
end
389389
test()
390+
391+
-- issue #412
392+
-- issue #418
393+
-- Conversion from symmetric modulo is incorrect.
394+
function test()
395+
assert(-2 % -2 == 0)
396+
assert(-1 % -2 == -1)
397+
assert(0 % -2 == 0)
398+
assert(1 % -2 == -1)
399+
assert(2 % -2 == 0)
400+
assert(-2 % 2 == 0)
401+
assert(-1 % 2 == 1)
402+
assert(0 % 2 == 0)
403+
assert(1 % 2 == 1)
404+
assert(2 % 2 == 0)
405+
end
406+
test()

_vm.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ func luaModulo(lhs, rhs LNumber) LNumber {
840840
flhs := float64(lhs)
841841
frhs := float64(rhs)
842842
v := math.Mod(flhs, frhs)
843-
if flhs < 0 || frhs < 0 && !(flhs < 0 && frhs < 0) {
843+
if frhs > 0 && v < 0 || frhs < 0 && v > 0 {
844844
v += frhs
845845
}
846846
return LNumber(v)

vm.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1533,7 +1533,7 @@ func luaModulo(lhs, rhs LNumber) LNumber {
15331533
flhs := float64(lhs)
15341534
frhs := float64(rhs)
15351535
v := math.Mod(flhs, frhs)
1536-
if flhs < 0 || frhs < 0 && !(flhs < 0 && frhs < 0) {
1536+
if frhs > 0 && v < 0 || frhs < 0 && v > 0 {
15371537
v += frhs
15381538
}
15391539
return LNumber(v)

0 commit comments

Comments
 (0)