format.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:19k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  format
  2. #
  3. # This file contains a collection of tests for one or more of the Tcl
  4. # built-in commands.  Sourcing this file into Tcl runs the tests and
  5. # generates output for errors.  No output means no errors were found.
  6. #
  7. # Copyright (c) 1991-1994 The Regents of the University of California.
  8. # Copyright (c) 1994-1998 Sun Microsystems, Inc.
  9. #
  10. # See the file "license.terms" for information on usage and redistribution
  11. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  12. #
  13. # RCS: @(#) $Id: format.test,v 1.11.2.8 2005/10/13 21:45:32 dkf Exp $
  14. if {[lsearch [namespace children] ::tcltest] == -1} {
  15.     package require tcltest 2
  16.     namespace import -force ::tcltest::*
  17. }
  18. # The following code is needed because some versions of SCO Unix have
  19. # a round-off error in sprintf which would cause some of the tests to
  20. # fail.  Someday I hope this code shouldn't be necessary (code added
  21. # 9/9/91).
  22. set ::tcltest::testConstraints(roundOffBug) 
  23. [expr {"[format %7.1e  68.514]" != "6.8e+01"}]
  24. test format-1.1 {integer formatting} {
  25.     format "%*d %d %d %d" 6 34 16923 -12 -1
  26. } {    34 16923 -12 -1}
  27. test format-1.2 {integer formatting} {nonPortable} {
  28.     format "%4d %4d %4d %4d %d %#x %#X" 6 34 16923 -12 -1 14 12
  29. } {   6   34 16923  -12 -1 0xe 0XC}
  30. # %u output depends on word length, so this test is not portable.
  31. test format-1.3 {integer formatting} {nonPortable} {
  32.     format "%4u %4u %4u %4u %d %#o" 6 34 16923 -12 -1 0
  33. } {   6   34 16923 4294967284 -1 0}
  34. test format-1.4 {integer formatting} {
  35.     format "%-4d %-4i %-4d %-4ld" 6 34 16923 -12 -1
  36. } {6    34   16923 -12 }
  37. test format-1.5 {integer formatting} {
  38.     format "%04d %04d %04d %04i" 6 34 16923 -12 -1
  39. } {0006 0034 16923 -012}
  40. test format-1.6 {integer formatting} {
  41.     format "%00*d" 6 34
  42. } {000034}
  43. # Printing negative numbers in hex or octal format depends on word
  44. # length, so these tests are not portable.
  45. test format-1.7 {integer formatting} {nonPortable} {
  46.     format "%4x %4x %4x %4x" 6 34 16923 -12 -1
  47. } {   6   22 421b fffffff4}
  48. test format-1.8 {integer formatting} {nonPortable} {
  49.     format "%#x %#X %#X %#x" 6 34 16923 -12 -1
  50. } {0x6 0X22 0X421B 0xfffffff4}
  51. test format-1.9 {integer formatting} {nonPortable} {
  52.     format "%#20x %#20x %#20x %#20x" 6 34 16923 -12 -1
  53. } {                 0x6                 0x22               0x421b           0xfffffff4}
  54. test format-1.10 {integer formatting} {nonPortable} {
  55.     format "%-#20x %-#20x %-#20x %-#20x" 6 34 16923 -12 -1
  56. } {0x6                  0x22                 0x421b               0xfffffff4          }
  57. test format-1.11 {integer formatting} {nonPortable} {
  58.     format "%-#20o %#-20o %#-20o %#-20o" 6 34 16923 -12 -1
  59. } {06                   042                  041033               037777777764        }
  60. test format-2.1 {string formatting} {
  61.     format "%s %s %c %s" abcd {This is a very long test string.} 120 x
  62. } {abcd This is a very long test string. x x}
  63. test format-2.2 {string formatting} {
  64.     format "%20s %20s %20c %20s" abcd {This is a very long test string.} 120 x
  65. } {                abcd This is a very long test string.                    x                    x}
  66. test format-2.3 {string formatting} {
  67.     format "%.10s %.10s %c %.10s" abcd {This is a very long test string.} 120 x
  68. } {abcd This is a  x x}
  69. test format-2.4 {string formatting} {
  70.     format "%s %s %% %c %s" abcd {This is a very long test string.} 120 x
  71. } {abcd This is a very long test string. % x x}
  72. test format-2.5 {string formatting, embedded nulls} {
  73.     format "%10s" abcdef
  74. } "   abcdef"
  75. test format-2.6 {string formatting, international chars} {
  76.     format "%10s" abcufeffdef
  77. } "   abcufeffdef"
  78. test format-2.7 {string formatting, international chars} {
  79.     format "%.5s" abcufeffdef
  80. } "abcufeffd"
  81. test format-2.8 {string formatting, international chars} {
  82.     format "fooufeffbar%s" baz
  83. } "fooufeffbarbaz"
  84. test format-2.9 {string formatting, width} {
  85.     format "a%5sa" f
  86. } "a    fa"
  87. test format-2.10 {string formatting, width} {
  88.     format "a%-5sa" f
  89. } "af    a"
  90. test format-2.11 {string formatting, width} {
  91.     format "a%2sa" foo
  92. } "afooa"
  93. test format-2.12 {string formatting, width} {
  94.     format "a%0sa" foo
  95. } "afooa"
  96. test format-2.13 {string formatting, precision} {
  97.     format "a%.2sa" foobarbaz
  98. } "afoa"
  99. test format-2.14 {string formatting, precision} {
  100.     format "a%.sa" foobarbaz
  101. } "aa"
  102. test format-2.15 {string formatting, precision} {
  103.     list [catch {format "a%.-2sa" foobarbaz} msg] $msg
  104. } {1 {bad field specifier "-"}}
  105. test format-2.16 {string formatting, width and precision} {
  106.     format "a%5.2sa" foobarbaz
  107. } "a   foa"
  108. test format-2.17 {string formatting, width and precision} {
  109.     format "a%5.7sa" foobarbaz
  110. } "afoobarba"
  111. test format-3.1 {Tcl_FormatObjCmd: character formatting} {
  112.     format "|%c|%0c|%-1c|%1c|%-6c|%6c|%*c|%*c|" 65 65 65 65 65 65 3 65 -4 65
  113. } "|A|A|A|A|A     |     A|  A|A   |"
  114. test format-3.2 {Tcl_FormatObjCmd: international character formatting} {
  115.     format "|%c|%0c|%-1c|%1c|%-6c|%6c|%*c|%*c|" 0xa2 0x4e4e 0x25a 0xc3 0xff08 0 3 0x6575 -4 0x4e4f
  116. } "|ua2|u4e4e|u25a|uc3|uff08     |     |  u6575|u4e4f   |"
  117. test format-4.1 {e and f formats} {eformat} {
  118.     format "%e %e %e %e" 34.2e12 68.514 -.125 -16000. .000053
  119. } {3.420000e+13 6.851400e+01 -1.250000e-01 -1.600000e+04}
  120. test format-4.2 {e and f formats} {eformat} {
  121.     format "%20e %20e %20e %20e" 34.2e12 68.514 -.125 -16000. .000053
  122. } {        3.420000e+13         6.851400e+01        -1.250000e-01        -1.600000e+04}
  123. test format-4.3 {e and f formats} {eformat roundOffBug} {
  124.     format "%.1e %.1e %.1e %.1e" 34.2e12 68.514 -.126 -16000. .000053
  125. } {3.4e+13 6.9e+01 -1.3e-01 -1.6e+04}
  126. test format-4.4 {e and f formats} {eformat roundOffBug} {
  127.     format "%020e %020e %020e %020e" 34.2e12 68.514 -.126 -16000. .000053
  128. } {000000003.420000e+13 000000006.851400e+01 -00000001.260000e-01 -00000001.600000e+04}
  129. test format-4.5 {e and f formats} {eformat roundOffBug} {
  130.     format "%7.1e %7.1e %7.1e %7.1e" 34.2e12 68.514 -.126 -16000. .000053
  131. } {3.4e+13 6.9e+01 -1.3e-01 -1.6e+04}
  132. test format-4.6 {e and f formats roundOffBug} {
  133.     format "%f %f %f %f" 34.2e12 68.514 -.125 -16000. .000053
  134. } {34200000000000.000000 68.514000 -0.125000 -16000.000000}
  135. test format-4.7 {e and f formats} {nonPortable} {
  136.     format "%.4f %.4f %.4f %.4f %.4f" 34.2e12 68.514 -.125 -16000. .000053
  137. } {34200000000000.0000 68.5140 -0.1250 -16000.0000 0.0001}
  138. test format-4.8 {e and f formats} {eformat} {
  139.     format "%.4e %.5e %.6e" -9.99996 -9.99996 9.99996
  140. } {-1.0000e+01 -9.99996e+00 9.999960e+00}
  141. test format-4.9 {e and f formats} {
  142.     format "%.4f %.5f %.6f" -9.99996 -9.99996 9.99996
  143. } {-10.0000 -9.99996 9.999960}
  144. test format-4.10 {e and f formats} {
  145.     format "%20f %-20f %020f" -9.99996 -9.99996 9.99996
  146. } {           -9.999960 -9.999960            0000000000009.999960}
  147. test format-4.11 {e and f formats} {
  148.     format "%-020f %020f" -9.99996 -9.99996 9.99996
  149. } {-9.999960            -000000000009.999960}
  150. test format-4.12 {e and f formats} {eformat} {
  151.     format "%.0e %#.0e" -9.99996 -9.99996 9.99996
  152. } {-1e+01 -1.e+01}
  153. test format-4.13 {e and f formats} {
  154.     format "%.0f %#.0f" -9.99996 -9.99996 9.99996
  155. } {-10 -10.}
  156. test format-4.14 {e and f formats} {
  157.     format "%.4f %.5f %.6f" -9.99996 -9.99996 9.99996
  158. } {-10.0000 -9.99996 9.999960}
  159. test format-4.15 {e and f formats} {
  160.     format "%3.0f %3.0f %3.0f %3.0f" 1.0 1.1 1.01 1.001
  161. } {  1   1   1   1}
  162. test format-4.16 {e and f formats} {
  163.     format "%3.1f %3.1f %3.1f %3.1f" 0.0 0.1 0.01 0.001
  164. } {0.0 0.1 0.0 0.0}
  165. test format-5.1 {g-format} {eformat} {
  166.     format "%.3g" 12341.0
  167. } {1.23e+04}
  168. test format-5.2 {g-format} {eformat} {
  169.     format "%.3G" 1234.12345
  170. } {1.23E+03}
  171. test format-5.3 {g-format} {
  172.     format "%.3g" 123.412345
  173. } {123}
  174. test format-5.4 {g-format} {
  175.     format "%.3g" 12.3412345
  176. } {12.3}
  177. test format-5.5 {g-format} {
  178.     format "%.3g" 1.23412345
  179. } {1.23}
  180. test format-5.6 {g-format} {
  181.     format "%.3g" 1.23412345
  182. } {1.23}
  183. test format-5.7 {g-format} {
  184.     format "%.3g" .123412345
  185. } {0.123}
  186. test format-5.8 {g-format} {
  187.     format "%.3g" .012341
  188. } {0.0123}
  189. test format-5.9 {g-format} {
  190.     format "%.3g" .0012341
  191. } {0.00123}
  192. test format-5.10 {g-format} {
  193.     format "%.3g" .00012341
  194. } {0.000123}
  195. test format-5.11 {g-format} {eformat} {
  196.     format "%.3g" .00001234
  197. } {1.23e-05}
  198. test format-5.12 {g-format} {eformat} {
  199.     format "%.4g" 9999.6
  200. } {1e+04}
  201. test format-5.13 {g-format} {
  202.     format "%.4g" 999.96
  203. } {1000}
  204. test format-5.14 {g-format} {
  205.     format "%.3g" 1.0
  206. } {1}
  207. test format-5.15 {g-format} {
  208.     format "%.3g" .1
  209. } {0.1}
  210. test format-5.16 {g-format} {
  211.     format "%.3g" .01
  212. } {0.01}
  213. test format-5.17 {g-format} {
  214.     format "%.3g" .001
  215. } {0.001}
  216. test format-5.18 {g-format} {eformat} {
  217.     format "%.3g" .00001
  218. } {1e-05}
  219. test format-5.19 {g-format} {eformat} {
  220.     format "%#.3g" 1234.0
  221. } {1.23e+03}
  222. test format-5.20 {g-format} {eformat} {
  223.     format "%#.3G" 9999.5
  224. } {1.00E+04}
  225. test format-6.1 {floating-point zeroes} {eformat} {
  226.     format "%e %f %g" 0.0 0.0 0.0 0.0
  227. } {0.000000e+00 0.000000 0}
  228. test format-6.2 {floating-point zeroes} {eformat} {
  229.     format "%.4e %.4f %.4g" 0.0 0.0 0.0 0.0
  230. } {0.0000e+00 0.0000 0}
  231. test format-6.3 {floating-point zeroes} {eformat} {
  232.     format "%#.4e %#.4f %#.4g" 0.0 0.0 0.0 0.0
  233. } {0.0000e+00 0.0000 0.000}
  234. test format-6.4 {floating-point zeroes} {eformat} {
  235.     format "%.0e %.0f %.0g" 0.0 0.0 0.0 0.0
  236. } {0e+00 0 0}
  237. test format-6.5 {floating-point zeroes} {eformat} {
  238.     format "%#.0e %#.0f %#.0g" 0.0 0.0 0.0 0.0
  239. } {0.e+00 0. 0.}
  240. test format-6.6 {floating-point zeroes} {
  241.     format "%3.0f %3.0f %3.0f %3.0f" 0.0 0.0 0.0 0.0
  242. } {  0   0   0   0}
  243. test format-6.7 {floating-point zeroes} {
  244.     format "%3.0f %3.0f %3.0f %3.0f" 1.0 1.1 1.01 1.001
  245. } {  1   1   1   1}
  246. test format-6.8 {floating-point zeroes} {
  247.     format "%3.1f %3.1f %3.1f %3.1f" 0.0 0.1 0.01 0.001
  248. } {0.0 0.1 0.0 0.0}
  249. test format-7.1 {various syntax features} {
  250.     format "%*.*f" 12 3 12.345678901
  251. } {      12.346}
  252. test format-7.2 {various syntax features} {
  253.     format "%0*.*f" 12 3 12.345678901
  254. } {00000012.346}
  255. test format-7.3 {various syntax features} {
  256.     format "*t\n"
  257. } {* n}
  258. test format-8.1 {error conditions} {
  259.     catch format
  260. } 1
  261. test format-8.2 {error conditions} {
  262.     catch format msg
  263.     set msg
  264. } {wrong # args: should be "format formatString ?arg arg ...?"}
  265. test format-8.3 {error conditions} {
  266.     catch {format %*d}
  267. } 1
  268. test format-8.4 {error conditions} {
  269.     catch {format %*d} msg
  270.     set msg
  271. } {not enough arguments for all format specifiers}
  272. test format-8.5 {error conditions} {
  273.     catch {format %*.*f 12}
  274. } 1
  275. test format-8.6 {error conditions} {
  276.     catch {format %*.*f 12} msg
  277.     set msg
  278. } {not enough arguments for all format specifiers}
  279. test format-8.7 {error conditions} {
  280.     catch {format %*.*f 12 3}
  281. } 1
  282. test format-8.8 {error conditions} {
  283.     catch {format %*.*f 12 3} msg
  284.     set msg
  285. } {not enough arguments for all format specifiers}
  286. test format-8.9 {error conditions} {
  287.     list [catch {format %*d x 3} msg] $msg
  288. } {1 {expected integer but got "x"}}
  289. test format-8.10 {error conditions} {
  290.     list [catch {format %*.*f 2 xyz 3} msg] $msg
  291. } {1 {expected integer but got "xyz"}}
  292. test format-8.11 {error conditions} {
  293.     catch {format %d 2a}
  294. } 1
  295. test format-8.12 {error conditions} {
  296.     catch {format %d 2a} msg
  297.     set msg
  298. } {expected integer but got "2a"}
  299. test format-8.13 {error conditions} {
  300.     catch {format %c 2x}
  301. } 1
  302. test format-8.14 {error conditions} {
  303.     catch {format %c 2x} msg
  304.     set msg
  305. } {expected integer but got "2x"}
  306. test format-8.15 {error conditions} {
  307.     catch {format %f 2.1z}
  308. } 1
  309. test format-8.16 {error conditions} {
  310.     catch {format %f 2.1z} msg
  311.     set msg
  312. } {expected floating-point number but got "2.1z"}
  313. test format-8.17 {error conditions} {
  314.     catch {format ab%}
  315. } 1
  316. test format-8.18 {error conditions} {
  317.     catch {format ab% 12} msg
  318.     set msg
  319. } {format string ended in middle of field specifier}
  320. test format-8.19 {error conditions} {
  321.     catch {format %q x}
  322. } 1
  323. test format-8.20 {error conditions} {
  324.     catch {format %q x} msg
  325.     set msg
  326. } {bad field specifier "q"}
  327. test format-8.21 {error conditions} {
  328.     catch {format %d}
  329. } 1
  330. test format-8.22 {error conditions} {
  331.     catch {format %d} msg
  332.     set msg
  333. } {not enough arguments for all format specifiers}
  334. test format-8.23 {error conditions} {
  335.     catch {format "%d %d" 24 xyz} msg
  336.     set msg
  337. } {expected integer but got "xyz"}
  338. test format-9.1 {long result} {
  339.     set a {1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
  340.     format {1111 2222 3333 4444 5555 6666 7777 8888 9999 aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn oooo pppp qqqq rrrr ssss tttt uuuu vvvv wwww xxxx yyyy zzzz AAAA BBBB CCCC DDDD EEEE FFFF GGGG %s %s} $a $a
  341. } {1111 2222 3333 4444 5555 6666 7777 8888 9999 aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn oooo pppp qqqq rrrr ssss tttt uuuu vvvv wwww xxxx yyyy zzzz AAAA BBBB CCCC DDDD EEEE FFFF GGGG 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
  342. test format-10.1 {"h" format specifier} {nonPortable} {
  343.     format %hd 0xffff
  344. } -1
  345. test format-10.2 {"h" format specifier} {nonPortable} {
  346.     format %hx 0x10fff
  347. } fff
  348. test format-10.3 {"h" format specifier} {nonPortable} {
  349.     format %hd 0x10000
  350. } 0
  351. test format-10.4 {"h" format specifier} {
  352.     # Bug 1154163: This is minimal behaviour for %hx specifier!
  353.     format %hx 1
  354. } 1
  355. test format-10.5 {"h" format specifier} {
  356.     # Bug 1284178: Highly out-of-range values shouldn't cause errors
  357.     format %hu 0x100000000
  358. } 0
  359. test format-11.1 {XPG3 %$n specifiers} {
  360.     format {%2$d %1$d} 4 5
  361. } {5 4}
  362. test format-11.2 {XPG3 %$n specifiers} {
  363.     format {%2$d %1$d %1$d %3$d} 4 5 6
  364. } {5 4 4 6}
  365. test format-11.3 {XPG3 %$n specifiers} {
  366.     list [catch {format {%2$d %3$d} 4 5} msg] $msg
  367. } {1 {"%n$" argument index out of range}}
  368. test format-11.4 {XPG3 %$n specifiers} {
  369.     list [catch {format {%2$d %0$d} 4 5 6} msg] $msg
  370. } {1 {"%n$" argument index out of range}}
  371. test format-11.5 {XPG3 %$n specifiers} {
  372.     list [catch {format {%d %1$d} 4 5 6} msg] $msg
  373. } {1 {cannot mix "%" and "%n$" conversion specifiers}}
  374. test format-11.6 {XPG3 %$n specifiers} {
  375.     list [catch {format {%2$d %d} 4 5 6} msg] $msg
  376. } {1 {cannot mix "%" and "%n$" conversion specifiers}}
  377. test format-11.7 {XPG3 %$n specifiers} {
  378.     list [catch {format {%2$d %3d} 4 5 6} msg] $msg
  379. } {1 {cannot mix "%" and "%n$" conversion specifiers}}
  380. test format-11.8 {XPG3 %$n specifiers} {
  381.     format {%2$*d %3$d} 1 10 4
  382. } {         4 4}
  383. test format-11.9 {XPG3 %$n specifiers} {
  384.     format {%2$.*s %4$d} 1 5 abcdefghijklmnop 44
  385. } {abcde 44}
  386. test format-11.10 {XPG3 %$n specifiers} {
  387.     list [catch {format {%2$*d} 4} msg] $msg
  388. } {1 {"%n$" argument index out of range}}
  389. test format-11.11 {XPG3 %$n specifiers} {
  390.     list [catch {format {%2$*d} 4 5} msg] $msg
  391. } {1 {"%n$" argument index out of range}}
  392. test format-11.12 {XPG3 %$n specifiers} {
  393.     list [catch {format {%2$*d} 4 5 6} msg] $msg
  394. } {0 {    6}}
  395. test format-12.1 {negative width specifiers} {
  396.     format "%*d" -47 25
  397. } {25                                             }
  398. test format-13.1 {tcl_precision fuzzy comparison} {
  399.     catch {unset a}
  400.     catch {unset b}
  401.     catch {unset c}
  402.     catch {unset d}
  403.     set a 0.0000000000001
  404.     set b 0.00000000000001
  405.     set c 0.00000000000000001
  406.     set d [expr $a + $b + $c]
  407.     format {%0.10f %0.12f %0.15f %0.17f} $d $d $d $d
  408. } {0.0000000000 0.000000000000 0.000000000000110 0.00000000000011001}
  409. test format-13.2 {tcl_precision fuzzy comparison} {
  410.     catch {unset a}
  411.     catch {unset b}
  412.     catch {unset c}
  413.     catch {unset d}
  414.     set a 0.000000000001
  415.     set b 0.000000000000005
  416.     set c 0.0000000000000008
  417.     set d [expr $a + $b + $c]
  418.     format {%0.10f %0.12f %0.15f %0.17f} $d $d $d $d
  419. } {0.0000000000 0.000000000001 0.000000000001006 0.00000000000100580}
  420. test format-13.3 {tcl_precision fuzzy comparison} {
  421.     catch {unset a}
  422.     catch {unset b}
  423.     catch {unset c}
  424.     set a 0.00000000000099
  425.     set b 0.000000000000011
  426.     set c [expr $a + $b]
  427.     format {%0.10f %0.12f %0.15f %0.17f} $c $c $c $c
  428. } {0.0000000000 0.000000000001 0.000000000001001 0.00000000000100100}
  429. test format-13.4 {tcl_precision fuzzy comparison} {
  430.     catch {unset a}
  431.     catch {unset b}
  432.     catch {unset c}
  433.     set a 0.444444444444
  434.     set b 0.33333333333333
  435.     set c [expr $a + $b]
  436.     format {%0.10f %0.12f %0.15f %0.16f} $c $c $c $c
  437. } {0.7777777778 0.777777777777 0.777777777777330 0.7777777777773300}
  438. test format-13.5 {tcl_precision fuzzy comparison} {
  439.     catch {unset a}
  440.     catch {unset b}
  441.     catch {unset c}
  442.     set a 0.444444444444
  443.     set b 0.99999999999999
  444.     set c [expr $a + $b]
  445.     format {%0.10f %0.12f %0.15f} $c $c $c
  446. } {1.4444444444 1.444444444444 1.444444444443990}
  447. test format-14.1 {testing MAX_FLOAT_SIZE for 0 and 1} {
  448.     format {%s} ""
  449. } {}
  450. test format-14.2 {testing MAX_FLOAT_SIZE for 0 and 1} {
  451.     format {%s} "a"
  452. } {a}
  453. test format-15.1 {testing %0..s 0 padding for chars/strings} {
  454.     format %05s a
  455. } {0000a}
  456. test format-15.2 {testing %0..s 0 padding for chars/strings} {
  457.     format "% 5s" a
  458. } {    a}
  459. test format-15.3 {testing %0..s 0 padding for chars/strings} {
  460.     format %5s a
  461. } {    a}
  462. test format-15.4 {testing %0..s 0 padding for chars/strings} {
  463.     format %05c 61
  464. } {0000=}
  465. set a "0123456789"
  466. set b ""
  467. for {set i 0} {$i < 290} {incr i} {
  468.     append b $a
  469. }
  470. for {set i 290} {$i < 400} {incr i} {
  471.     test format-16.[expr $i -289] {testing MAX_FLOAT_SIZE} {
  472.         format {%s} $b    
  473.     } $b
  474.     append b "x"
  475. }
  476. ::tcltest::testConstraint 64bitInts 
  477. [expr {0x80000000 > 0}]
  478. ::tcltest::testConstraint wideIntExpressions 
  479. [expr {wide(0x80000000) != int(0x80000000)}]
  480. test format-17.1 {testing %d with wide} {64bitInts wideIntExpressions} {
  481.     format %d 7810179016327718216
  482. } 1819043144
  483. test format-17.2 {testing %ld with wide} {64bitInts} {
  484.     format %ld 7810179016327718216
  485. } 7810179016327718216
  486. test format-17.3 {testing %ld with non-wide} {64bitInts} {
  487.     format %ld 42
  488. } 42
  489. test format-17.4 {testing %l with non-integer} {
  490.     format %lf 1
  491. } 1.000000
  492. test format-17.5 {type conversions with wides} {
  493.     set a 0xAAAAAAAA ;# NB: Careful to make separate objects here!
  494.     set b 0xAAAAAAA; append b A
  495.     set result [expr {$a == $b}]
  496.     format %x $a
  497.     lappend result [expr {$a == $b}]
  498. } {1 1}
  499. test format-18.1 {do not demote existing numeric values} {
  500.     set a 0xaaaaaaaa
  501.     # Ensure $a and $b are separate objects
  502.     set b 0xaaaa
  503.     append b aaaa
  504.     set result [expr {$a == $b}]
  505.     format %08lx $b
  506.     lappend result [expr {$a == $b}]
  507.     set b 0xaaaa
  508.     append b aaaa
  509.     lappend result [expr {$a == $b}]
  510.     format %08x $b
  511.     lappend result [expr {$a == $b}]
  512. } {1 1 1 1}
  513. test format-18.2 {do not demote existing numeric values} {wideIntExpressions} {
  514.     set a [expr {0xaaaaaaaaaa + 1}]
  515.     set b 0xaaaaaaaaab
  516.     list [format %08x $a] [expr {$a == $b}]
  517. } {aaaaaaab 1}
  518. test format-19.1 {
  519.     regression test - tcl-core message by Brian Griffin on
  520.     26 0ctober 2004
  521. } -body {
  522.     set x 0x8fedc654
  523.     list [expr { ~ $x }] [format %08x [expr { ~$x }]]
  524. } -match regexp -result {-2414724693 f*701239ab}
  525. # cleanup
  526. catch {unset a}
  527. catch {unset b}
  528. catch {unset c}
  529. catch {unset d}
  530. ::tcltest::cleanupTests
  531. return