diff options
author | Araq <rumpf_a@web.de> | 2019-07-15 17:22:01 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2019-07-15 17:22:01 +0200 |
commit | 76f9ddb6ab461ba18811c8b257d286602bca0475 (patch) | |
tree | 0acb566bf893fe8a291acd812d8b5326e80c791f | |
parent | dd7dd1b6dc775ab106fec3c4224f89d41a5ad176 (diff) | |
download | Nim-76f9ddb6ab461ba18811c8b257d286602bca0475.tar.gz |
fixes #11723
-rw-r--r-- | lib/pure/strformat.nim | 4 | ||||
-rw-r--r-- | tests/stdlib/tstrformat.nim | 18 |
2 files changed, 20 insertions, 2 deletions
diff --git a/lib/pure/strformat.nim b/lib/pure/strformat.nim index d3026165a..ba75ce95f 100644 --- a/lib/pure/strformat.nim +++ b/lib/pure/strformat.nim @@ -415,7 +415,7 @@ proc parseStandardFormatSpecifier*(s: string; start = 0; raise newException(ValueError, "invalid format string, cannot parse: " & s[i..^1]) -proc formatValue*(result: var string; value: SomeInteger; specifier: string) = +proc formatValue*[T: SomeInteger](result: var string; value: T; specifier: string) = ## Standard format implementation for ``SomeInteger``. It makes little ## sense to call this directly, but it is required to exist ## by the ``&`` macro. @@ -509,7 +509,7 @@ proc formatValue*(result: var string; value: string; specifier: string) = setLen(value, runeOffset(value, spec.precision)) result.add alignString(value, spec.minimumWidth, spec.align, spec.fill) -proc formatValue[T](result: var string; value: T; specifier: string) = +proc formatValue[T: not SomeInteger](result: var string; value: T; specifier: string) = mixin `$` formatValue(result, $value, specifier) diff --git a/tests/stdlib/tstrformat.nim b/tests/stdlib/tstrformat.nim index 188ce8106..732283674 100644 --- a/tests/stdlib/tstrformat.nim +++ b/tests/stdlib/tstrformat.nim @@ -115,3 +115,21 @@ proc print_object(animalAddr: AnimalRef) = echo fmt"Received {animalAddr[]}" print_object(AnimalRef(name: "Foo", species: "Bar")) + +# bug #11723 + +let pos: Positive = 64 +doAssert fmt"{pos:3}" == " 64" +doAssert fmt"{pos:3b}" == "1000000" +doAssert fmt"{pos:3d}" == " 64" +doAssert fmt"{pos:3o}" == "100" +doAssert fmt"{pos:3x}" == " 40" +doAssert fmt"{pos:3X}" == " 40" + +let nat: Natural = 64 +doAssert fmt"{nat:3}" == " 64" +doAssert fmt"{nat:3b}" == "1000000" +doAssert fmt"{nat:3d}" == " 64" +doAssert fmt"{nat:3o}" == "100" +doAssert fmt"{nat:3x}" == " 40" +doAssert fmt"{nat:3X}" == " 40" |