parent
9a81e91fa5
commit
5badeea170
2 changed files with 23 additions and 7 deletions
|
|
@ -7,15 +7,8 @@ proc `$`*(x: int): string {.magic: "IntToStr", noSideEffect.}
|
||||||
## spelling `toString`:idx:.
|
## spelling `toString`:idx:.
|
||||||
|
|
||||||
template dollarImpl(x: uint | uint64, result: var string) =
|
template dollarImpl(x: uint | uint64, result: var string) =
|
||||||
type destTyp = typeof(x)
|
|
||||||
if x == 0:
|
|
||||||
return "0"
|
|
||||||
elif x == 1:
|
|
||||||
return "1"
|
|
||||||
|
|
||||||
let length = digits10(x)
|
let length = digits10(x)
|
||||||
setLen(result, length)
|
setLen(result, length)
|
||||||
|
|
||||||
numToString(result, x, length)
|
numToString(result, x, length)
|
||||||
|
|
||||||
when defined(js):
|
when defined(js):
|
||||||
|
|
|
||||||
23
tests/stdlib/tdigitsutils.nim
Normal file
23
tests/stdlib/tdigitsutils.nim
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
import std/private/digitsutils
|
||||||
|
|
||||||
|
template main =
|
||||||
|
block: # digits10
|
||||||
|
doAssert digits10(0'u64) == 1
|
||||||
|
# checks correctness on all powers of 10 + [0,-1,1]
|
||||||
|
var x = 1'u64
|
||||||
|
var num = 1
|
||||||
|
while true:
|
||||||
|
# echo (x, num)
|
||||||
|
doAssert digits10(x) == num
|
||||||
|
doAssert digits10(x+1) == num
|
||||||
|
if x > 1:
|
||||||
|
doAssert digits10(x-1) == num - 1
|
||||||
|
num += 1
|
||||||
|
let xOld = x
|
||||||
|
x *= 10
|
||||||
|
if x < xOld:
|
||||||
|
# wrap-around
|
||||||
|
break
|
||||||
|
|
||||||
|
static: main()
|
||||||
|
main()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue