1 # Commands covered: format
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.
7 # Copyright (c) 1991-1994 The Regents of the University of California.
8 # Copyright (c) 1994-1998 Sun Microsystems, Inc.
10 # See the file "license.terms" for information on usage and redistribution
11 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
13 if {"::tcltest" ni [namespace children]} {
14 package require tcltest 2.5
15 namespace import -force ::tcltest::*
18 # %u output depends on word length, so this test is not portable.
19 testConstraint longIs32bit [expr {int(0x80000000) < 0}]
20 testConstraint longIs64bit [expr {int(0x8000000000000000) < 0}]
21 testConstraint wideIs64bit [expr {
22 (wide(0x80000000) > 0) && (wide(0x8000000000000000) < 0)}]
23 testConstraint wideBiggerThanInt [expr {wide(0x80000000) != int(0x80000000)}]
24 # MSVC uses a broken libc that gets sprintf("%g") wrong. This is a pain
25 # particularly in Continuous Integration, and there isn't anything much we can
27 testConstraint notWinCI [expr {
28 ($::tcl_platform(platform) ne "windows") || ![info exists ::env(CI)]}]
30 test format-1.1 {integer formatting} {
31 format "%*d %d %d %d" 6 34 16923 -12 -1
33 test format-1.2 {integer formatting} {
34 format "%4d %4d %4d %4d %d %#x %#X" 6 34 16923 -12 -1 14 12
35 } { 6 34 16923 -12 -1 0xe 0XC}
36 test format-1.3 {integer formatting} longIs32bit {
37 format "%4u %4u %4u %4u %d %#o" 6 34 16923 -12 -1 0
38 } { 6 34 16923 4294967284 -1 0}
39 test format-1.3.1 {integer formatting} longIs64bit {
40 format "%4u %4u %4u %4u %d %#o" 6 34 16923 -12 -1 0
41 } { 6 34 16923 18446744073709551604 -1 0}
42 test format-1.4 {integer formatting} {
43 format "%-4d %-4i %-4d %-4ld" 6 34 16923 -12 -1
45 test format-1.5 {integer formatting} {
46 format "%04d %04d %04d %04i" 6 34 16923 -12 -1
47 } {0006 0034 16923 -012}
48 test format-1.6 {integer formatting} {
51 # Printing negative numbers in hex or octal format depends on word
52 # length, so these tests are not portable.
53 test format-1.7 {integer formatting} longIs32bit {
54 format "%4x %4x %4x %4x" 6 34 16923 -12 -1
55 } { 6 22 421b fffffff4}
56 test format-1.7.1 {integer formatting} longIs64bit {
57 format "%4x %4x %4x %4x" 6 34 16923 -12 -1
58 } { 6 22 421b fffffffffffffff4}
59 test format-1.8 {integer formatting} longIs32bit {
60 format "%#x %#x %#X %#X %#x" 0 6 34 16923 -12 -1
61 } {0x0 0x6 0X22 0X421B 0xfffffff4}
62 test format-1.8.1 {integer formatting} longIs64bit {
63 format "%#x %#x %#X %#X %#x" 0 6 34 16923 -12 -1
64 } {0x0 0x6 0X22 0X421B 0xfffffffffffffff4}
65 test format-1.9 {integer formatting} longIs32bit {
66 format "%#5x %#20x %#20x %#20x %#20x" 0 6 34 16923 -12 -1
67 } { 0x0 0x6 0x22 0x421b 0xfffffff4}
68 test format-1.9.1 {integer formatting} longIs64bit {
69 format "%#5x %#20x %#20x %#20x %#20x" 0 6 34 16923 -12 -1
70 } { 0x0 0x6 0x22 0x421b 0xfffffffffffffff4}
71 test format-1.10 {integer formatting} longIs32bit {
72 format "%-#5x %-#20x %-#20x %-#20x %-#20x" 0 6 34 16923 -12 -1
73 } {0x0 0x6 0x22 0x421b 0xfffffff4 }
74 test format-1.10.1 {integer formatting} longIs64bit {
75 format "%-#5x %-#20x %-#20x %-#20x %-#20x" 0 6 34 16923 -12 -1
76 } {0x0 0x6 0x22 0x421b 0xfffffffffffffff4 }
77 test format-1.11 {integer formatting} longIs32bit {
78 format "%-#5o %-#20o %#-20o %#-20o %#-20o" 0 6 34 16923 -12 -1
79 } {0 06 042 041033 037777777764 }
80 test format-1.11.1 {integer formatting} longIs64bit {
81 format "%-#5o %-#20o %#-20o %#-20o %#-20o" 0 6 34 16923 -12 -1
82 } {0 06 042 041033 01777777777777777777764}
83 test format-1.12 {integer formatting} {
84 format "%b %#b %#b %llb" 5 0 5 [expr {2**100}]
85 } {101 0b0 0b101 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000}
86 test format-1.13 {integer formatting} longIs32bit {
87 format "%#d %#d %#d %#d %#d" 0 6 34 16923 -12 -1
89 test format-1.13.1 {integer formatting} longIs64bit {
90 format "%#d %#d %#d %#d %#d" 0 6 34 16923 -12 -1
92 test format-1.14 {integer formatting} longIs32bit {
93 format "%#5d %#20d %#20d %#20d %#20d" 0 6 34 16923 -12 -1
95 test format-1.14.1 {integer formatting} longIs64bit {
96 format "%#5d %#20d %#20d %#20d %#20d" 0 6 34 16923 -12 -1
98 test format-1.15 {integer formatting} longIs32bit {
99 format "%-#5d %-#20d %-#20d %-#20d %-#20d" 0 6 34 16923 -12 -1
100 } {0 6 34 16923 -12 }
101 test format-1.15.1 {integer formatting} longIs64bit {
102 format "%-#5d %-#20d %-#20d %-#20d %-#20d" 0 6 34 16923 -12 -1
103 } {0 6 34 16923 -12 }
106 test format-2.1 {string formatting} {
107 format "%s %s %c %s" abcd {This is a very long test string.} 120 x
108 } {abcd This is a very long test string. x x}
109 test format-2.2 {string formatting} {
110 format "%20s %20s %20c %20s" abcd {This is a very long test string.} 120 x
111 } { abcd This is a very long test string. x x}
112 test format-2.3 {string formatting} {
113 format "%.10s %.10s %c %.10s" abcd {This is a very long test string.} 120 x
114 } {abcd This is a x x}
115 test format-2.4 {string formatting} {
116 format "%s %s %% %c %s" abcd {This is a very long test string.} 120 x
117 } {abcd This is a very long test string. % x x}
118 test format-2.5 {string formatting, embedded nulls} {
119 format "%10s" abc\0def
121 test format-2.6 {string formatting, international chars} {
122 format "%10s" abc\ufeffdef
124 test format-2.7 {string formatting, international chars} {
125 format "%.5s" abc\ufeffdef
127 test format-2.8 {string formatting, international chars} {
128 format "foo\ufeffbar%s" baz
130 test format-2.9 {string formatting, width} {
133 test format-2.10 {string formatting, width} {
136 test format-2.11 {string formatting, width} {
139 test format-2.12 {string formatting, width} {
142 test format-2.13 {string formatting, precision} {
143 format "a%.2sa" foobarbaz
145 test format-2.14 {string formatting, precision} {
146 format "a%.sa" foobarbaz
148 test format-2.15 {string formatting, precision} {
149 list [catch {format "a%.-2sa" foobarbaz} msg] $msg
150 } {1 {bad field specifier "-"}}
151 test format-2.16 {string formatting, width and precision} {
152 format "a%5.2sa" foobarbaz
154 test format-2.17 {string formatting, width and precision} {
155 format "a%5.7sa" foobarbaz
158 test format-3.1 {Tcl_FormatObjCmd: character formatting} {
159 format "|%c|%0c|%-1c|%1c|%-6c|%6c|%*c|%*c|" 65 65 65 65 65 65 3 65 -4 65
160 } "|A|A|A|A|A | A| A|A |"
161 test format-3.2 {Tcl_FormatObjCmd: international character formatting} {
162 format "|%c|%0c|%-1c|%1c|%-6c|%6c|%*c|%*c|" 0xa2 0x4e4e 0x25a 0xc3 0xff08 0 3 0x6575 -4 0x4e4f
163 } "|\ua2|\u4e4e|\u25a|\uc3|\uff08 | \0| \u6575|\u4e4f |"
165 test format-4.1 {e and f formats} {eformat} {
166 format "%e %e %e %e" 34.2e12 68.514 -.125 -16000. .000053
167 } {3.420000e+13 6.851400e+01 -1.250000e-01 -1.600000e+04}
168 test format-4.2 {e and f formats} {eformat} {
169 format "%20e %20e %20e %20e" 34.2e12 68.514 -.125 -16000. .000053
170 } { 3.420000e+13 6.851400e+01 -1.250000e-01 -1.600000e+04}
171 test format-4.3 {e and f formats} {eformat} {
172 format "%.1e %.1e %.1e %.1e" 34.2e12 68.514 -.126 -16000. .000053
173 } {3.4e+13 6.9e+01 -1.3e-01 -1.6e+04}
174 test format-4.4 {e and f formats} {eformat} {
175 format "%020e %020e %020e %020e" 34.2e12 68.514 -.126 -16000. .000053
176 } {000000003.420000e+13 000000006.851400e+01 -00000001.260000e-01 -00000001.600000e+04}
177 test format-4.5 {e and f formats} {eformat} {
178 format "%7.1e %7.1e %7.1e %7.1e" 34.2e12 68.514 -.126 -16000. .000053
179 } {3.4e+13 6.9e+01 -1.3e-01 -1.6e+04}
180 test format-4.6 {e and f formats} {
181 format "%f %f %f %f" 34.2e12 68.514 -.125 -16000. .000053
182 } {34200000000000.000000 68.514000 -0.125000 -16000.000000}
183 test format-4.7 {e and f formats} {
184 format "%.4f %.4f %.4f %.4f %.4f" 34.2e12 68.514 -.125 -16000. .000053
185 } {34200000000000.0000 68.5140 -0.1250 -16000.0000 0.0001}
186 test format-4.8 {e and f formats} {eformat} {
187 format "%.4e %.5e %.6e" -9.99996 -9.99996 9.99996
188 } {-1.0000e+01 -9.99996e+00 9.999960e+00}
189 test format-4.9 {e and f formats} {
190 format "%.4f %.5f %.6f" -9.99996 -9.99996 9.99996
191 } {-10.0000 -9.99996 9.999960}
192 test format-4.10 {e and f formats} {
193 format "%20f %-20f %020f" -9.99996 -9.99996 9.99996
194 } { -9.999960 -9.999960 0000000000009.999960}
195 test format-4.11 {e and f formats} {
196 format "%-020f %020f" -9.99996 -9.99996 9.99996
197 } {-9.999960 -000000000009.999960}
198 test format-4.12 {e and f formats} {eformat} {
199 format "%.0e %#.0e" -9.99996 -9.99996 9.99996
201 test format-4.13 {e and f formats} {
202 format "%.0f %#.0f" -9.99996 -9.99996 9.99996
204 test format-4.14 {e and f formats} {
205 format "%.4f %.5f %.6f" -9.99996 -9.99996 9.99996
206 } {-10.0000 -9.99996 9.999960}
207 test format-4.15 {e and f formats} {
208 format "%3.0f %3.0f %3.0f %3.0f" 1.0 1.1 1.01 1.001
210 test format-4.16 {e and f formats} {
211 format "%3.1f %3.1f %3.1f %3.1f" 0.0 0.1 0.01 0.001
214 test format-5.1 {g-format} {eformat} {
215 format "%.3g" 12341.0
217 test format-5.2 {g-format} {eformat} {
218 format "%.3G" 1234.12345
220 test format-5.3 {g-format} {
221 format "%.3g" 123.412345
223 test format-5.4 {g-format} {
224 format "%.3g" 12.3412345
226 test format-5.5 {g-format} {
227 format "%.3g" 1.23412345
229 test format-5.6 {g-format} {
230 format "%.3g" 1.23412345
232 test format-5.7 {g-format} {
233 format "%.3g" .123412345
235 test format-5.8 {g-format} {
236 format "%.3g" .012341
238 test format-5.9 {g-format} {
239 format "%.3g" .0012341
241 test format-5.10 {g-format} {
242 format "%.3g" .00012341
244 test format-5.11 {g-format} {eformat} {
245 format "%.3g" .00001234
247 test format-5.12 {g-format} {eformat} {
250 test format-5.13 {g-format} {
253 test format-5.14 {g-format} {
256 test format-5.15 {g-format} {
259 test format-5.16 {g-format} {
262 test format-5.17 {g-format} {
265 test format-5.18 {g-format} {eformat} {
268 test format-5.19 {g-format} {eformat} {
269 format "%#.3g" 1234.0
271 test format-5.20 {g-format} {eformat} {
272 format "%#.3G" 9999.5
275 test format-6.1 {floating-point zeroes} {eformat} {
276 format "%e %f %g" 0.0 0.0 0.0 0.0
277 } {0.000000e+00 0.000000 0}
278 test format-6.2 {floating-point zeroes} {eformat} {
279 format "%.4e %.4f %.4g" 0.0 0.0 0.0 0.0
280 } {0.0000e+00 0.0000 0}
281 test format-6.3 {floating-point zeroes} {eformat notWinCI} {
282 format "%#.4e %#.4f %#.4g" 0.0 0.0 0.0 0.0
283 } {0.0000e+00 0.0000 0.000}
284 test format-6.4 {floating-point zeroes} {eformat} {
285 format "%.0e %.0f %.0g" 0.0 0.0 0.0 0.0
287 test format-6.5 {floating-point zeroes} {eformat notWinCI} {
288 format "%#.0e %#.0f %#.0g" 0.0 0.0 0.0 0.0
290 test format-6.6 {floating-point zeroes} {
291 format "%3.0f %3.0f %3.0f %3.0f" 0.0 0.0 0.0 0.0
293 test format-6.7 {floating-point zeroes} {
294 format "%3.0f %3.0f %3.0f %3.0f" 1.0 1.1 1.01 1.001
296 test format-6.8 {floating-point zeroes} {
297 format "%3.1f %3.1f %3.1f %3.1f" 0.0 0.1 0.01 0.001
300 test format-7.1 {various syntax features} {
301 format "%*.*f" 12 3 12.345678901
303 test format-7.2 {various syntax features} {
304 format "%0*.*f" 12 3 12.345678901
306 test format-7.3 {various syntax features} {
310 test format-8.1 {error conditions} {
313 test format-8.2 {error conditions} {
316 } {wrong # args: should be "format formatString ?arg ...?"}
317 test format-8.3 {error conditions} {
320 test format-8.4 {error conditions} {
321 catch {format %*d} msg
323 } {not enough arguments for all format specifiers}
324 test format-8.5 {error conditions} {
325 catch {format %*.*f 12}
327 test format-8.6 {error conditions} {
328 catch {format %*.*f 12} msg
330 } {not enough arguments for all format specifiers}
331 test format-8.7 {error conditions} {
332 catch {format %*.*f 12 3}
334 test format-8.8 {error conditions} {
335 catch {format %*.*f 12 3} msg
337 } {not enough arguments for all format specifiers}
338 test format-8.9 {error conditions} {
339 list [catch {format %*d x 3} msg] $msg
340 } {1 {expected integer but got "x"}}
341 test format-8.10 {error conditions} {
342 list [catch {format %*.*f 2 xyz 3} msg] $msg
343 } {1 {expected integer but got "xyz"}}
344 test format-8.11 {error conditions} {
347 test format-8.12 {error conditions} {
348 catch {format %d 2a} msg
350 } {expected integer but got "2a"}
351 test format-8.13 {error conditions} {
354 test format-8.14 {error conditions} {
355 catch {format %c 2x} msg
357 } {expected integer but got "2x"}
358 test format-8.15 {error conditions} {
359 catch {format %f 2.1z}
361 test format-8.16 {error conditions} {
362 catch {format %f 2.1z} msg
364 } {expected floating-point number but got "2.1z"}
365 test format-8.17 {error conditions} {
368 test format-8.18 {error conditions} {
369 catch {format ab% 12} msg
371 } {format string ended in middle of field specifier}
372 test format-8.19 {error conditions} {
375 test format-8.20 {error conditions} {
376 catch {format %q x} msg
378 } {bad field specifier "q"}
379 test format-8.21 {error conditions} {
382 test format-8.22 {error conditions} {
383 catch {format %d} msg
385 } {not enough arguments for all format specifiers}
386 test format-8.23 {error conditions} {
387 catch {format "%d %d" 24 xyz} msg
389 } {expected integer but got "xyz"}
391 test format-9.1 {long result} {
392 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}
393 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
394 } {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}
396 test format-10.1 {"h" format specifier} {
399 test format-10.2 {"h" format specifier} {
402 test format-10.3 {"h" format specifier} {
405 test format-10.4 {"h" format specifier} {
406 # Bug 1154163: This is minimal behaviour for %hx specifier!
409 test format-10.5 {"h" format specifier} {
410 # Bug 1284178: Highly out-of-range values shouldn't cause errors
411 format %hu 0x100000000
414 test format-11.1 {XPG3 %$n specifiers} {
415 format {%2$d %1$d} 4 5
417 test format-11.2 {XPG3 %$n specifiers} {
418 format {%2$d %1$d %1$d %3$d} 4 5 6
420 test format-11.3 {XPG3 %$n specifiers} {
421 list [catch {format {%2$d %3$d} 4 5} msg] $msg
422 } {1 {"%n$" argument index out of range}}
423 test format-11.4 {XPG3 %$n specifiers} {
424 list [catch {format {%2$d %0$d} 4 5 6} msg] $msg
425 } {1 {"%n$" argument index out of range}}
426 test format-11.5 {XPG3 %$n specifiers} {
427 list [catch {format {%d %1$d} 4 5 6} msg] $msg
428 } {1 {cannot mix "%" and "%n$" conversion specifiers}}
429 test format-11.6 {XPG3 %$n specifiers} {
430 list [catch {format {%2$d %d} 4 5 6} msg] $msg
431 } {1 {cannot mix "%" and "%n$" conversion specifiers}}
432 test format-11.7 {XPG3 %$n specifiers} {
433 list [catch {format {%2$d %3d} 4 5 6} msg] $msg
434 } {1 {cannot mix "%" and "%n$" conversion specifiers}}
435 test format-11.8 {XPG3 %$n specifiers} {
436 format {%2$*d %3$d} 1 10 4
438 test format-11.9 {XPG3 %$n specifiers} {
439 format {%2$.*s %4$d} 1 5 abcdefghijklmnop 44
441 test format-11.10 {XPG3 %$n specifiers} {
442 list [catch {format {%2$*d} 4} msg] $msg
443 } {1 {"%n$" argument index out of range}}
444 test format-11.11 {XPG3 %$n specifiers} {
445 list [catch {format {%2$*d} 4 5} msg] $msg
446 } {1 {"%n$" argument index out of range}}
447 test format-11.12 {XPG3 %$n specifiers} {
448 list [catch {format {%2$*d} 4 5 6} msg] $msg
451 test format-12.1 {negative width specifiers} {
455 test format-13.1 {tcl_precision fuzzy comparison} {
460 set a 0.0000000000001
461 set b 0.00000000000001
462 set c 0.00000000000000001
463 set d [expr {$a + $b + $c}]
464 format {%0.10f %0.12f %0.15f %0.17f} $d $d $d $d
465 } {0.0000000000 0.000000000000 0.000000000000110 0.00000000000011001}
466 test format-13.2 {tcl_precision fuzzy comparison} {
472 set b 0.000000000000005
473 set c 0.0000000000000008
474 set d [expr {$a + $b + $c}]
475 format {%0.10f %0.12f %0.15f %0.17f} $d $d $d $d
476 } {0.0000000000 0.000000000001 0.000000000001006 0.00000000000100580}
477 test format-13.3 {tcl_precision fuzzy comparison} {
481 set a 0.00000000000099
482 set b 0.000000000000011
483 set c [expr {$a + $b}]
484 format {%0.10f %0.12f %0.15f %0.17f} $c $c $c $c
485 } {0.0000000000 0.000000000001 0.000000000001001 0.00000000000100100}
486 test format-13.4 {tcl_precision fuzzy comparison} {
491 set b 0.33333333333333
492 set c [expr {$a + $b}]
493 format {%0.10f %0.12f %0.15f %0.16f} $c $c $c $c
494 } {0.7777777778 0.777777777777 0.777777777777330 0.7777777777773300}
495 test format-13.5 {tcl_precision fuzzy comparison} {
500 set b 0.99999999999999
501 set c [expr {$a + $b}]
502 format {%0.10f %0.12f %0.15f} $c $c $c
503 } {1.4444444444 1.444444444444 1.444444444443990}
505 test format-14.1 {testing MAX_FLOAT_SIZE for 0 and 1} {
508 test format-14.2 {testing MAX_FLOAT_SIZE for 0 and 1} {
512 test format-15.1 {testing %0..s 0 padding for chars/strings} {
515 test format-15.2 {testing %0..s 0 padding for chars/strings} {
518 test format-15.3 {testing %0..s 0 padding for chars/strings} {
521 test format-15.4 {testing %0..s 0 padding for chars/strings} {
524 test format-15.5 {testing %d space padding for integers} {
525 format "(% 1d) (% 1d)" 10 -10
527 test format-15.6 {testing %d plus padding for integers} {
528 format "(%+1d) (%+1d)" 10 -10
533 for {set i 0} {$i < 290} {incr i} {
536 for {set i 290} {$i < 400} {incr i} {
537 test format-16.[expr {$i -289}] {testing MAX_FLOAT_SIZE} {
543 test format-17.1 {testing %d with wide} {wideIs64bit wideBiggerThanInt} {
544 format %d 7810179016327718216
546 test format-17.2 {testing %ld with wide} {wideIs64bit} {
547 format %ld 7810179016327718216
548 } 7810179016327718216
549 test format-17.3 {testing %ld with non-wide} {wideIs64bit} {
552 test format-17.4 {testing %l with non-integer} {
555 test format-17.5 {testing %llu with positive bignum} -body {
556 format %llu 0xabcdef0123456789abcdef
557 } -returnCodes 1 -result {unsigned bignum format is invalid}
558 test format-17.6 {testing %llu with negative number} -body {
560 } -returnCodes 1 -result {unsigned bignum format is invalid}
562 test format-18.1 {do not demote existing numeric values} {
564 # Ensure $a and $b are separate objects
567 set result [expr {$a == $b}]
569 lappend result [expr {$a == $b}]
572 lappend result [expr {$a == $b}]
574 lappend result [expr {$a == $b}]
576 test format-18.2 {do not demote existing numeric values} {wideBiggerThanInt} {
577 set a [expr {0xaaaaaaaaaa + 1}]
579 list [format %08x $a] [expr {$a == $b}]
582 test format-19.1 {regression test - tcl-core message by Brian Griffin on 26 0ctober 2004} -body {
584 list [expr { ~ $x }] [format %08x [expr { ~$x }]]
585 } -match regexp -result {-2414724693 f*701239ab}
586 test format-19.2 {Bug 1867855} {
589 test format-19.3 {Bug 2830354} {
590 string length [format %340f 0]
593 test format-19.4.1 {Bug d498578df4: width overflow should cause limit exceeded} \
594 -constraints {longIs32bit} -body {
595 # in case of overflow into negative, it produces width -2 (and limit exceeded),
596 # in case of width will be unsigned, it will be outside limit (2GB for 32bit)...
597 # and it don't throw an error in case the bug is not fixed (and probably no segfault).
598 format %[expr {0xffffffff - 1}]g 0
599 } -returnCodes error -result "max size for a Tcl value exceeded"
601 test format-19.4.2 {Bug d498578df4: width overflow should cause limit exceeded} -body {
602 # limit should exceeds in any case,
603 # and it don't throw an error in case the bug is not fixed (and probably no segfault).
604 format %[expr {0xffffffffffffffff - 1}]g 0
605 } -returnCodes error -result "max size for a Tcl value exceeded"
607 # Note that this test may fail in future versions
608 test format-20.1 {Bug 2932421: plain %s caused internalrep change of args} -body {
609 set x [dict create a b c d]
611 # After this, obj in $x should be a dict
612 # We are testing to make sure it has not been shimmered to a
613 # different internalrep when that is not necessary.
614 # Whether or not there is a string rep - we should not care!
615 tcl::unsupported::representation $x
616 } -match glob -result {value is a dict *}
623 ::tcltest::cleanupTests