I ran across this rather strange failure in one of my tests and am at a loss as
to what's causing it. Can someone please enlighten me?
For the purposes of this post the filename is roundxxx.nim. I left in a bunch
of extra assertions just to show it otherwise works as expected.
import math
proc round*(n: float, d: int = 0): float =
floor(n * pow(10, (d.float * -1)) + 0.5) * pow(10, d.float)
when isMainModule:
block:
doAssert round(0.1) == 0.0
doAssert round(0.1, 0) == 0.0
doAssert round(0.1, -1) == 0.1
doAssert round(1.49) == 1.0
doAssert round(1.49, 0) == 1.0
doAssert round(1.49, -1) == 1.5
doAssert round(1.49, -2) == 1.49
doAssert round(1.5) == 2.0
doAssert round(1.9) == 2.0
doAssert round(1.79, -1) == 1.8
doAssert round(1.95, -1) == 2.0
doAssert round(1.95, -2) == 1.95
doAssert round(1.955, -2) == 1.96
doAssert round(1, 0) == 1.0
doAssert round(1, 1) == 0.0
doAssert round(9, 1) == 10.0
doAssert round(149) == 149.0
doAssert round(149, 0) == 149.0
doAssert round(149, 1) == 150.0
doAssert round(149, 2) == 100.0
doAssert round(150, 2) == 200.0
doAssert round(499, 2) == 500.0
doAssert round(499, 3) == 0.0
doAssert round(15) == 15.0
doAssert round(19) == 19.0
doAssert round(19, 1) == 20.0
doAssert round(195, 1) == 200.0
doAssert round(195, 2) == 200.0
doAssert round(195.4) == 195.0
doAssert round(195.5) == 196.0
# XXX this is some strangeness going on here
doAssert round(1.89, -1) == 1.9 # XXX I've no clue why this fails
let n = round(1.89, -1) # XXX when the exact same values if
doAssert $n == "1.9" # XXX casted to strings pass just fine
Run
The result of nim c -r roundxxx.nim is as follows
roundxxx.nim(39) roundxxx
system.nim(3790) failedAssertImpl
system.nim(3783) raiseAssert
system.nim(2830) sysFatal
Error: unhandled exception:
[redacted]/roundxxx.nim(39, 14)
`round(1.89, -1) == 1.9` [AssertionError]
Error: execution of an external program failed:
'[redacted]/roundxxx '
Run
FYI: nim --version
Nim Compiler Version 0.19.0 [Linux: amd64]
Compiled at 2018-09-26
Copyright (c) 2006-2018 by Andreas Rumpf
git hash: f6c5c636bb1a1f4e1301ae0ba5a8afecef439132
active boot switches: -d:release
Run