tstrformat.nim 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. discard """
  2. action: "run"
  3. """
  4. import strformat
  5. type Obj = object
  6. proc `$`(o: Obj): string = "foobar"
  7. var o: Obj
  8. doAssert fmt"{o}" == "foobar"
  9. doAssert fmt"{o:10}" == "foobar "
  10. # see issue #7933
  11. var str = "abc"
  12. doAssert fmt">7.1 :: {str:>7.1}" == ">7.1 :: a"
  13. doAssert fmt">7.2 :: {str:>7.2}" == ">7.2 :: ab"
  14. doAssert fmt">7.3 :: {str:>7.3}" == ">7.3 :: abc"
  15. doAssert fmt">7.9 :: {str:>7.9}" == ">7.9 :: abc"
  16. doAssert fmt">7.0 :: {str:>7.0}" == ">7.0 :: "
  17. doAssert fmt" 7.1 :: {str:7.1}" == " 7.1 :: a "
  18. doAssert fmt" 7.2 :: {str:7.2}" == " 7.2 :: ab "
  19. doAssert fmt" 7.3 :: {str:7.3}" == " 7.3 :: abc "
  20. doAssert fmt" 7.9 :: {str:7.9}" == " 7.9 :: abc "
  21. doAssert fmt" 7.0 :: {str:7.0}" == " 7.0 :: "
  22. doAssert fmt"^7.1 :: {str:^7.1}" == "^7.1 :: a "
  23. doAssert fmt"^7.2 :: {str:^7.2}" == "^7.2 :: ab "
  24. doAssert fmt"^7.3 :: {str:^7.3}" == "^7.3 :: abc "
  25. doAssert fmt"^7.9 :: {str:^7.9}" == "^7.9 :: abc "
  26. doAssert fmt"^7.0 :: {str:^7.0}" == "^7.0 :: "
  27. str = "äöüe\u0309\u0319o\u0307\u0359"
  28. doAssert fmt"^7.1 :: {str:^7.1}" == "^7.1 :: ä "
  29. doAssert fmt"^7.2 :: {str:^7.2}" == "^7.2 :: äö "
  30. doAssert fmt"^7.3 :: {str:^7.3}" == "^7.3 :: äöü "
  31. doAssert fmt"^7.0 :: {str:^7.0}" == "^7.0 :: "
  32. # this is actually wrong, but the unicode module has no support for graphemes
  33. doAssert fmt"^7.4 :: {str:^7.4}" == "^7.4 :: äöüe "
  34. doAssert fmt"^7.9 :: {str:^7.9}" == "^7.9 :: äöüe\u0309\u0319o\u0307\u0359"
  35. # see issue #7932
  36. doAssert fmt"{15:08}" == "00000015" # int, works
  37. doAssert fmt"{1.5:08}" == "000001.5" # float, works
  38. doAssert fmt"{1.5:0>8}" == "000001.5" # workaround using fill char works for positive floats
  39. doAssert fmt"{-1.5:0>8}" == "0000-1.5" # even that does not work for negative floats
  40. doAssert fmt"{-1.5:08}" == "-00001.5" # works
  41. doAssert fmt"{1.5:+08}" == "+00001.5" # works
  42. doAssert fmt"{1.5: 08}" == " 00001.5" # works
  43. # only add explicitly requested sign if value != -0.0 (neg zero)
  44. doAssert fmt"{-0.0:g}" == "-0"
  45. doassert fmt"{-0.0:+g}" == "-0"
  46. doassert fmt"{-0.0: g}" == "-0"
  47. doAssert fmt"{0.0:g}" == "0"
  48. doAssert fmt"{0.0:+g}" == "+0"
  49. doAssert fmt"{0.0: g}" == " 0"