Merge pull request #4890 from jdbernard/fix-times-initinterval

Bugfix for times.initInterval (issue #4889)
This commit is contained in:
Dominik Picheta 2016-10-13 09:17:01 +02:00 • committed by GitHub
commit 00cb5b4965
2 changed files with 16 additions and 9 deletions

View file

@ -266,13 +266,13 @@ proc initInterval*(milliseconds, seconds, minutes, hours, days, months,
result.milliseconds = `mod`(milliseconds, 1000) result.milliseconds = `mod`(milliseconds, 1000)
carryO = `div`(milliseconds, 1000) carryO = `div`(milliseconds, 1000)
result.seconds = `mod`(carryO + seconds, 60) result.seconds = `mod`(carryO + seconds, 60)
carryO = `div`(seconds, 60) carryO = `div`(carryO + seconds, 60)
result.minutes = `mod`(carryO + minutes, 60) result.minutes = `mod`(carryO + minutes, 60)
carryO = `div`(minutes, 60) carryO = `div`(carryO + minutes, 60)
result.hours = `mod`(carryO + hours, 24) result.hours = `mod`(carryO + hours, 24)
carryO = `div`(hours, 24) carryO = `div`(carryO + hours, 24)
result.days = carryO + days result.days = carryO + days
carryO = 0
result.months = `mod`(months, 12) result.months = `mod`(months, 12)
carryO = `div`(months, 12) carryO = `div`(months, 12)
result.years = carryO + years result.years = carryO + years
@ -283,13 +283,13 @@ proc `+`*(ti1, ti2: TimeInterval): TimeInterval =
result.milliseconds = `mod`(ti1.milliseconds + ti2.milliseconds, 1000) result.milliseconds = `mod`(ti1.milliseconds + ti2.milliseconds, 1000)
carryO = `div`(ti1.milliseconds + ti2.milliseconds, 1000) carryO = `div`(ti1.milliseconds + ti2.milliseconds, 1000)
result.seconds = `mod`(carryO + ti1.seconds + ti2.seconds, 60) result.seconds = `mod`(carryO + ti1.seconds + ti2.seconds, 60)
carryO = `div`(ti1.seconds + ti2.seconds, 60) carryO = `div`(carryO + ti1.seconds + ti2.seconds, 60)
result.minutes = `mod`(carryO + ti1.minutes + ti2.minutes, 60) result.minutes = `mod`(carryO + ti1.minutes + ti2.minutes, 60)
carryO = `div`(ti1.minutes + ti2.minutes, 60) carryO = `div`(carryO + ti1.minutes + ti2.minutes, 60)
result.hours = `mod`(carryO + ti1.hours + ti2.hours, 24) result.hours = `mod`(carryO + ti1.hours + ti2.hours, 24)
carryO = `div`(ti1.hours + ti2.hours, 24) carryO = `div`(carryO + ti1.hours + ti2.hours, 24)
result.days = carryO + ti1.days + ti2.days result.days = carryO + ti1.days + ti2.days
carryO = 0
result.months = `mod`(ti1.months + ti2.months, 12) result.months = `mod`(ti1.months + ti2.months, 12)
carryO = `div`(ti1.months + ti2.months, 12) carryO = `div`(ti1.months + ti2.months, 12)
result.years = carryO + ti1.years + ti2.years result.years = carryO + ti1.years + ti2.years

View file

@ -141,3 +141,10 @@ doAssert initInterval(months = 13) == initInterval(months = 1, years = 1)
let day = 24.hours let day = 24.hours
let tomorrow = getTime() + day let tomorrow = getTime() + day
doAssert tomorrow - getTime() == 60*60*24 doAssert tomorrow - getTime() == 60*60*24
doAssert milliseconds(1000 * 60) == minutes(1)
doAssert milliseconds(1000 * 60 * 60) == hours(1)
doAssert milliseconds(1000 * 60 * 60 * 24) == days(1)
doAssert seconds(60 * 60) == hours(1)
doAssert seconds(60 * 60 * 24) == days(1)
doAssert seconds(60 * 60 + 65) == (hours(1) + minutes(1) + seconds(5))