# xxx: test js target import genericstrformat import std/[strformat, strutils, times, tables, json] when defined(nimPreviewSlimSystem): import std/objectdollar proc main() = block: # issue #7632 doAssert works(5) == "formatted 5" doAssert fails0(6) == "formatted 6" doAssert fails(7) == "formatted 7" doAssert fails2[0](8) == "formatted 8" block: # other tests type Obj = object proc `$`(o: Obj): string = "foobar" # for custom types, formatValue needs to be overloaded. template formatValue(result: var string; value: Obj; specifier: string) = result.formatValue($value, specifier) var o: Obj doAssert fmt"{o}" == "foobar" doAssert fmt"{o:10}" == "foobar " doAssert fmt"{o=}" == "o=foobar" doAssert fmt"{o=:10}" == "o=foobar " block: # see issue #7933 var str = "abc" doAssert fmt">7.1 :: {str:>7.1}" == ">7.1 :: a" doAssert fmt">7.2 :: {str:>7.2}" == ">7.2 :: ab" doAssert fmt">7.3 :: {str:>7.3}" == ">7.3 :: abc" doAssert fmt">7.9 :: {str:>7.9}" == ">7.9 :: abc" doAssert fmt">7.0 :: {str:>7.0}" == ">7.0 :: " doAssert fmt" 7.1 :: {str:7.1}" == " 7.1 :: a " doAssert fmt" 7.2 :: {str:7.2}" == " 7.2 :: ab " doAssert fmt" 7.3 :: {str:7.3}" == " 7.3 :: abc " doAssert fmt" 7.9 :: {str:7.9}" == " 7.9 :: abc " doAssert fmt" 7.0 :: {str:7.0}" == " 7.0 :: " doAssert fmt"^7.1 :: {str:^7.1}" == "^7.1 :: a " doAssert fmt"^7.2 :: {str:^7.2}" == "^7.2 :: ab " doAssert fmt"^7.3 :: {str:^7.3}" == "^7.3 :: abc " doAssert fmt"^7.9 :: {str:^7.9}" == "^7.9 :: abc " doAssert fmt"^7.0 :: {str:^7.0}" == "^7.0 :: " doAssert fmt">7.1 :: {str=:>7.1}" == ">7.1 :: str= a" doAssert fmt">7.2 :: {str=:>7.2}" == ">7.2 :: str= ab" doAssert fmt">7.3 :: {str=:>7.3}" == ">7.3 :: str= abc" doAssert fmt">7.9 :: {str=:>7.9}" == ">7.9 :: str= abc" doAssert fmt">7.0 :: {str=:>7.0}" == ">7.0 :: str= " doAssert fmt" 7.1 :: {str=:7.1}" == " 7.1 :: str=a " doAssert fmt" 7.2 :: {str=:7.2}" == " 7.2 :: str=ab " doAssert fmt" 7.3 :: {str=:7.3}" == " 7.3 :: str=abc " doAssert fmt" 7.9 :: {str=:7.9}" == " 7.9 :: str=abc " doAssert fmt" 7.0 :: {str=:7.0}" == " 7.0 :: str= " doAssert fmt"^7.1 :: {str=:^7.1}" == "^7.1 :: str= a " doAssert fmt"^7.2 :: {str=:^7.2}" == "^7.2 :: str= ab " doAssert fmt"^7.3 :: {str=:^7.3}" == "^7.3 :: str= abc " doAssert fmt"^7.9 :: {str=:^7.9}" == "^7.9 :: str= abc " doAssert fmt"^7.0 :: {str=:^7.0}" == "^7.0 :: str= " str = "äöüe\u0309\u0319o\u0307\u0359" doAssert fmt"^7.1 :: {str:^7.1}" == "^7.1 :: ä " doAssert fmt"^7.2 :: {str:^7.2}" == "^7.2 :: äö " doAssert fmt"^7.3 :: {str:^7.3}" == "^7.3 :: äöü " doAssert fmt"^7.0 :: {str:^7.0}" == "^7.0 :: " doAssert fmt"^7.1 :: {str=:^7.1}" == "^7.1 :: str= ä " doAssert fmt"^7.2 :: {str=:^7.2}" == "^7.2 :: str= äö " doAssert fmt"^7.3 :: {str=:^7.3}" == "^7.3 :: str= äöü " doAssert fmt"^7.0 :: {str=:^7.0}" == "^7.0 :: str= " # this is actually wrong, but the unicode module has no support for graphemes doAssert fmt"^7.4 :: {str:^7.4}" == "^7.4 :: äöüe " doAssert fmt"^7.9 :: {str:^7.9}" == "^7.9 :: äöüe\u
discard """
targets: "cpp"
"""
import nativesockets