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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  string
  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. # This differs from the original string tests in that the tests call
  8. # things in procs, which uses the compiled string code instead of
  9. # the runtime parse string code.  The tests of import should match
  10. # their equivalent number in string.test.
  11. #
  12. # Copyright (c) 2001 by ActiveState Corporation.
  13. # Copyright (c) 2001 by Kevin B. Kenny.  All rights reserved.
  14. #
  15. # See the file "license.terms" for information on usage and redistribution
  16. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  17. #
  18. # RCS: @(#) $Id: stringComp.test,v 1.6.2.1 2004/10/28 00:01:12 dgp Exp $
  19. if {[lsearch [namespace children] ::tcltest] == -1} {
  20.     package require tcltest
  21.     namespace import -force ::tcltest::*
  22. }
  23. # Some tests require the testobj command
  24. set ::tcltest::testConstraints(testobj) 
  25. [expr {[info commands testobj] != {}}]
  26. test stringComp-1.1 {error conditions} {
  27.     proc foo {} {string gorp a b}
  28.     list [catch {foo} msg] $msg
  29. } {1 {bad option "gorp": must be bytelength, compare, equal, first, index, is, last, length, map, match, range, repeat, replace, tolower, toupper, totitle, trim, trimleft, trimright, wordend, or wordstart}}
  30. test stringComp-1.2 {error conditions} {
  31.     proc foo {} {string}
  32.     list [catch {foo} msg] $msg
  33. } {1 {wrong # args: should be "string option arg ?arg ...?"}}
  34. test stringComp-1.3 {error condition - undefined method during compile} {
  35.     # We don't want this to complain about 'never' because it may never
  36.     # be called, or string may get redefined.  This must compile OK.
  37.     proc foo {str i} {
  38.         if {"yes" == "no"} { string never called but complains here }
  39.         string index $str $i
  40.     }
  41.     foo abc 0
  42. } a
  43. test stringComp-2.1 {string compare, too few args} {
  44.     proc foo {} {string compare a}
  45.     list [catch {foo} msg] $msg
  46. } {1 {wrong # args: should be "string compare ?-nocase? ?-length int? string1 string2"}}
  47. test stringComp-2.2 {string compare, bad args} {
  48.     proc foo {} {string compare a b c}
  49.     list [catch {foo} msg] $msg
  50. } {1 {bad option "a": must be -nocase or -length}}
  51. test stringComp-2.3 {string compare, bad args} {
  52.     list [catch {string compare -length -nocase str1 str2} msg] $msg
  53. } {1 {expected integer but got "-nocase"}}
  54. test stringComp-2.4 {string compare, too many args} {
  55.     list [catch {string compare -length 10 -nocase str1 str2 str3} msg] $msg
  56. } {1 {wrong # args: should be "string compare ?-nocase? ?-length int? string1 string2"}}
  57. test stringComp-2.5 {string compare with length unspecified} {
  58.     list [catch {string compare -length 10 10} msg] $msg
  59. } {1 {wrong # args: should be "string compare ?-nocase? ?-length int? string1 string2"}}
  60. test stringComp-2.6 {string compare} {
  61.     proc foo {} {string compare abcde abdef}
  62.     foo
  63. } -1
  64. test stringComp-2.7 {string compare, shortest method name} {
  65.     proc foo {} {string c abcde ABCDE}
  66.     foo
  67. } 1
  68. test stringComp-2.8 {string compare} {
  69.     proc foo {} {string compare abcde abcde}
  70.     foo
  71. } 0
  72. test stringComp-2.9 {string compare with length} {
  73.     proc foo {} {string compare -length 2 abcde abxyz}
  74.     foo
  75. } 0
  76. test stringComp-2.10 {string compare with special index} {
  77.     proc foo {} {string compare -length end-3 abcde abxyz}
  78.     list [catch {foo} msg] $msg
  79. } {1 {expected integer but got "end-3"}}
  80. test stringComp-2.11 {string compare, unicode} {
  81.     proc foo {} {string compare abu7266 abu7267}
  82.     foo
  83. } -1
  84. test stringComp-2.12 {string compare, high bit} {
  85.     # This test will fail if the underlying comparaison
  86.     # is using signed chars instead of unsigned chars.
  87.     # (like SunOS's default memcmp thus the compat/memcmp.c)
  88.     proc foo {} {string compare "x80" "@"}
  89.     foo
  90.     # Nb this tests works also in utf8 space because x80 is
  91.     # translated into a 2 or more bytelength but whose first byte has
  92.     # the high bit set.
  93. } 1
  94. test stringComp-2.13 {string compare -nocase} {
  95.     proc foo {} {string compare -nocase abcde abdef}
  96.     foo
  97. } -1
  98. test stringComp-2.14 {string compare -nocase} {
  99.     proc foo {} {string c -nocase abcde ABCDE}
  100.     foo
  101. } 0
  102. test stringComp-2.15 {string compare -nocase} {
  103.     proc foo {} {string compare -nocase abcde abcde}
  104.     foo
  105. } 0
  106. test stringComp-2.16 {string compare -nocase with length} {
  107.     proc foo {} {string compare -length 2 -nocase abcde Abxyz}
  108.     foo
  109. } 0
  110. test stringComp-2.17 {string compare -nocase with length} {
  111.     proc foo {} {string compare -nocase -length 3 abcde Abxyz}
  112.     foo
  113. } -1
  114. test stringComp-2.18 {string compare -nocase with length <= 0} {
  115.     proc foo {} {string compare -nocase -length -1 abcde AbCdEf}
  116.     foo
  117. } -1
  118. test stringComp-2.19 {string compare -nocase with excessive length} {
  119.     proc foo {} {string compare -nocase -length 50 AbCdEf abcde}
  120.     foo
  121. } 1
  122. test stringComp-2.20 {string compare -len unicode} {
  123.     # These are strings that are 6 BYTELENGTH long, but the length
  124.     # shouldn't make a different because there are actually 3 CHARS long
  125.     proc foo {} {string compare -len 5 334334334 334334374}
  126.     foo
  127. } -1
  128. test stringComp-2.21 {string compare -nocase with special index} {
  129.     proc foo {} {string compare -nocase -length end-3 Abcde abxyz}
  130.     list [catch {foo} msg] $msg
  131. } {1 {expected integer but got "end-3"}}
  132. test stringComp-2.22 {string compare, null strings} {
  133.     proc foo {} {string compare "" ""}
  134.     foo
  135. } 0
  136. test stringComp-2.23 {string compare, null strings} {
  137.     proc foo {} {string compare "" foo}
  138.     foo
  139. } -1
  140. test stringComp-2.24 {string compare, null strings} {
  141.     proc foo {} {string compare foo ""}
  142.     foo
  143. } 1
  144. test stringComp-2.25 {string compare -nocase, null strings} {
  145.     proc foo {} {string compare -nocase "" ""}
  146.     foo
  147. } 0
  148. test stringComp-2.26 {string compare -nocase, null strings} {
  149.     proc foo {} {string compare -nocase "" foo}
  150.     foo
  151. } -1
  152. test stringComp-2.27 {string compare -nocase, null strings} {
  153.     proc foo {} {string compare -nocase foo ""}
  154.     foo
  155. } 1
  156. test stringComp-2.28 {string compare with length, unequal strings} {
  157.     proc foo {} {string compare -length 2 abc abde}
  158.     foo
  159. } 0
  160. test stringComp-2.29 {string compare with length, unequal strings} {
  161.     proc foo {} {string compare -length 2 ab abde}
  162.     foo
  163. } 0
  164. test stringComp-2.30 {string compare with NUL character vs. other ASCII} {
  165.     # Be careful here, since UTF-8 rep comparison with memcmp() of
  166.     # these puts chars in the wrong order
  167.     proc foo {} {string compare x00 x01}
  168.     foo
  169. } -1
  170. test stringComp-2.31 {string compare, high bit} {
  171.     proc foo {} {string compare "ax80" "a@"}
  172.     foo
  173. } 1
  174. test stringComp-2.32 {string compare, high bit} {
  175.     proc foo {} {string compare "ax00" "ax01"}
  176.     foo
  177. } -1
  178. test stringComp-2.33 {string compare, high bit} {
  179.     proc foo {} {string compare "x00x00" "x00x01"}
  180.     foo
  181. } -1
  182. # only need a few tests on equal, since it uses the same code as
  183. # string compare, but just modifies the return output
  184. test stringComp-3.1 {string equal} {
  185.     proc foo {} {string equal abcde abdef}
  186.     foo
  187. } 0
  188. test stringComp-3.2 {string equal} {
  189.     proc foo {} {string eq abcde ABCDE}
  190.     foo
  191. } 0
  192. test stringComp-3.3 {string equal} {
  193.     proc foo {} {string equal abcde abcde}
  194.     foo
  195. } 1
  196. test stringComp-3.4 {string equal -nocase} {
  197.     proc foo {} {string equal -nocase 334334334334374374374374 334334334334334334334334}
  198.     foo
  199. } 1
  200. test stringComp-3.5 {string equal -nocase} {
  201.     proc foo {} {string equal -nocase abcde abdef}
  202.     foo
  203. } 0
  204. test stringComp-3.6 {string equal -nocase} {
  205.     proc foo {} {string eq -nocase abcde ABCDE}
  206.     foo
  207. } 1
  208. test stringComp-3.7 {string equal -nocase} {
  209.     proc foo {} {string equal -nocase abcde abcde}
  210.     foo
  211. } 1
  212. test stringComp-3.8 {string equal with length, unequal strings} {
  213.     proc foo {} {string equal -length 2 abc abde}
  214.     foo
  215. } 1
  216. test stringComp-4.1 {string first, too few args} {
  217.     proc foo {} {string first a}
  218.     list [catch {foo} msg] $msg
  219. } {1 {wrong # args: should be "string first subString string ?startIndex?"}}
  220. test stringComp-4.2 {string first, bad args} {
  221.     proc foo {} {string first a b c}
  222.     list [catch {foo} msg] $msg
  223. } {1 {bad index "c": must be integer or end?-integer?}}
  224. test stringComp-4.3 {string first, too many args} {
  225.     proc foo {} {string first a b 5 d}
  226.     list [catch {foo} msg] $msg
  227. } {1 {wrong # args: should be "string first subString string ?startIndex?"}}
  228. test stringComp-4.4 {string first} {
  229.     proc foo {} {string first bq abcdefgbcefgbqrs}
  230.     foo
  231. } 12
  232. test stringComp-4.5 {string first} {
  233.     proc foo {} {string fir bcd abcdefgbcefgbqrs}
  234.     foo
  235. } 1
  236. test stringComp-4.6 {string first} {
  237.     proc foo {} {string f b abcdefgbcefgbqrs}
  238.     foo
  239. } 1
  240. test stringComp-4.7 {string first} {
  241.     proc foo {} {string first xxx x123xx345xxx789xxx012}
  242.     foo
  243. } 9
  244. test stringComp-4.8 {string first} {
  245.     proc foo {} {string first "" x123xx345xxx789xxx012}
  246.     foo
  247. } -1
  248. test stringComp-4.9 {string first, unicode} {
  249.     proc foo {} {string first x abcu7266x}
  250.     foo
  251. } 4
  252. test stringComp-4.10 {string first, unicode} {
  253.     proc foo {} {string first u7266 abcu7266x}
  254.     foo
  255. } 3
  256. test stringComp-4.11 {string first, start index} {
  257.     proc foo {} {string first u7266 abcu7266x 3}
  258.     foo
  259. } 3
  260. test stringComp-4.12 {string first, start index} {
  261.     proc foo {} {string first u7266 abcu7266x 4}
  262.     foo
  263. } -1
  264. test stringComp-4.13 {string first, start index} {
  265.     proc foo {} {string first u7266 abcu7266x end-2}
  266.     foo
  267. } 3
  268. test stringComp-4.14 {string first, negative start index} {
  269.     proc foo {} {string first b abc -1}
  270.     foo
  271. } 1
  272. test stringComp-5.1 {string index} {
  273.     proc foo {} {string index}
  274.     list [catch {foo} msg] $msg
  275. } {1 {wrong # args: should be "string index string charIndex"}}
  276. test stringComp-5.2 {string index} {
  277.     proc foo {} {string index a b c}
  278.     list [catch {foo} msg] $msg
  279. } {1 {wrong # args: should be "string index string charIndex"}}
  280. test stringComp-5.3 {string index} {
  281.     proc foo {} {string index abcde 0}
  282.     foo
  283. } a
  284. test stringComp-5.4 {string index} {
  285.     proc foo {} {string in abcde 4}
  286.     foo
  287. } e
  288. test stringComp-5.5 {string index} {
  289.     proc foo {} {string index abcde 5}
  290.     foo
  291. } {}
  292. test stringComp-5.6 {string index} {
  293.     proc foo {} {string index abcde -10}
  294.     list [catch {foo} msg] $msg
  295. } {0 {}}
  296. test stringComp-5.7 {string index} {
  297.     proc foo {} {string index a xyz}
  298.     list [catch {foo} msg] $msg
  299. } {1 {bad index "xyz": must be integer or end?-integer?}}
  300. test stringComp-5.8 {string index} {
  301.     proc foo {} {string index abc end}
  302.     foo
  303. } c
  304. test stringComp-5.9 {string index} {
  305.     proc foo {} {string index abc end-1}
  306.     foo
  307. } b
  308. test stringComp-5.10 {string index, unicode} {
  309.     proc foo {} {string index abcu7266d 4}
  310.     foo
  311. } d
  312. test stringComp-5.11 {string index, unicode} {
  313.     proc foo {} {string index abcu7266d 3}
  314.     foo
  315. } u7266
  316. test stringComp-5.12 {string index, unicode over char length, under byte length} {
  317.     proc foo {} {string index 334374334374 6}
  318.     foo
  319. } {}
  320. test stringComp-5.13 {string index, bytearray object} {
  321.     proc foo {} {string index [binary format a5 fuz] 0}
  322.     foo
  323. } f
  324. test stringComp-5.14 {string index, bytearray object} {
  325.     proc foo {} {string index [binary format I* {0x50515253 0x52}] 3}
  326.     foo
  327. } S
  328. test stringComp-5.15 {string index, bytearray object} {
  329.     proc foo {} {
  330. set b [binary format I* {0x50515253 0x52}]
  331. set i1 [string index $b end-6]
  332. set i2 [string index $b 1]
  333. string compare $i1 $i2
  334.     }
  335.     foo
  336. } 0
  337. test stringComp-5.16 {string index, bytearray object with string obj shimmering} {
  338.     proc foo {} {
  339. set str "0123456789x00 abcdedfghi"
  340. binary scan $str H* dump
  341. string compare [string index $str 10] x00
  342.     }
  343.     foo
  344. } 0
  345. test stringComp-5.17 {string index, bad integer} {
  346.     proc foo {} {string index "abc" 08}
  347.     list [catch {foo} msg] $msg
  348. } {1 {bad index "08": must be integer or end?-integer? (looks like invalid octal number)}}
  349. test stringComp-5.18 {string index, bad integer} {
  350.     proc foo {} {string index "abc" end-00289}
  351.     list [catch {foo} msg] $msg
  352. } {1 {bad index "end-00289": must be integer or end?-integer? (looks like invalid octal number)}}
  353. test stringComp-5.19 {string index, bytearray object out of bounds} {
  354.     proc foo {} {string index [binary format I* {0x50515253 0x52}] -1}
  355.     foo
  356. } {}
  357. test stringComp-5.20 {string index, bytearray object out of bounds} {
  358.     proc foo {} {string index [binary format I* {0x50515253 0x52}] 20}
  359.     foo
  360. } {}
  361. proc largest_int {} {
  362.     # This will give us what the largest valid int on this machine is,
  363.     # so we can test for overflow properly below on >32 bit systems
  364.     set int 1
  365.     set exp 7; # assume we get at least 8 bits
  366.     while {$int > 0} { set int [expr {1 << [incr exp]}] }
  367.     return [expr {$int-1}]
  368. }
  369. ## string is
  370. ## not yet bc
  371. catch {rename largest_int {}}
  372. ## string last
  373. ## not yet bc
  374. ## string length
  375. ## not yet bc
  376. test stringComp-8.1 {string bytelength} {
  377.     proc foo {} {string bytelength}
  378.     list [catch {foo} msg] $msg
  379. } {1 {wrong # args: should be "string bytelength string"}}
  380. test stringComp-8.2 {string bytelength} {
  381.     proc foo {} {string bytelength a b}
  382.     list [catch {foo} msg] $msg
  383. } {1 {wrong # args: should be "string bytelength string"}}
  384. test stringComp-8.3 {string bytelength} {
  385.     proc foo {} {string bytelength "u00c7"}
  386.     foo
  387. } 2
  388. test stringComp-8.4 {string bytelength} {
  389.     proc foo {} {string b ""}
  390.     foo
  391. } 0
  392. ## string length
  393. ##
  394. test stringComp-9.1 {string length} {
  395.     proc foo {} {string length}
  396.     list [catch {foo} msg] $msg
  397. } {1 {wrong # args: should be "string length string"}}
  398. test stringComp-9.2 {string length} {
  399.     proc foo {} {string length a b}
  400.     list [catch {foo} msg] $msg
  401. } {1 {wrong # args: should be "string length string"}}
  402. test stringComp-9.3 {string length} {
  403.     proc foo {} {string length "a little string"}
  404.     foo
  405. } 15
  406. test stringComp-9.4 {string length} {
  407.     proc foo {} {string le ""}
  408.     foo
  409. } 0
  410. test stringComp-9.5 {string length, unicode} {
  411.     proc foo {} {string le "abcdu7266"}
  412.     foo
  413. } 5
  414. test stringComp-9.6 {string length, bytearray object} {
  415.     proc foo {} {string length [binary format a5 foo]}
  416.     foo
  417. } 5
  418. test stringComp-9.7 {string length, bytearray object} {
  419.     proc foo {} {string length [binary format I* {0x50515253 0x52}]}
  420.     foo
  421. } 8
  422. ## string map
  423. ## not yet bc
  424. ## string match
  425. ##
  426. test stringComp-11.1 {string match, too few args} {
  427.     proc foo {} {string match a}
  428.     list [catch {foo} msg] $msg
  429. } {1 {wrong # args: should be "string match ?-nocase? pattern string"}}
  430. test stringComp-11.2 {string match, too many args} {
  431.     proc foo {} {string match a b c d}
  432.     list [catch {foo} msg] $msg
  433. } {1 {wrong # args: should be "string match ?-nocase? pattern string"}}
  434. test stringComp-11.3 {string match} {
  435.     proc foo {} {string match abc abc}
  436.     foo
  437. } 1
  438. test stringComp-11.4 {string match} {
  439.     proc foo {} {string mat abc abd}
  440.     foo
  441. } 0
  442. test stringComp-11.5 {string match} {
  443.     proc foo {} {string match ab*c abc}
  444.     foo
  445. } 1
  446. test stringComp-11.6 {string match} {
  447.     proc foo {} {string match ab**c abc}
  448.     foo
  449. } 1
  450. test stringComp-11.7 {string match} {
  451.     proc foo {} {string match ab* abcdef}
  452.     foo
  453. } 1
  454. test stringComp-11.8 {string match} {
  455.     proc foo {} {string match *c abc}
  456.     foo
  457. } 1
  458. test stringComp-11.9 {string match} {
  459.     proc foo {} {string match *3*6*9 0123456789}
  460.     foo
  461. } 1
  462. test stringComp-11.10 {string match} {
  463.     proc foo {} {string match *3*6*9 01234567890}
  464.     foo
  465. } 0
  466. test stringComp-11.11 {string match} {
  467.     proc foo {} {string match a?c abc}
  468.     foo
  469. } 1
  470. test stringComp-11.12 {string match} {
  471.     proc foo {} {string match a??c abc}
  472.     foo
  473. } 0
  474. test stringComp-11.13 {string match} {
  475.     proc foo {} {string match ?1??4???8? 0123456789}
  476.     foo
  477. } 1
  478. test stringComp-11.14 {string match} {
  479.     proc foo {} {string match {[abc]bc} abc}
  480.     foo
  481. } 1
  482. test stringComp-11.15 {string match} {
  483.     proc foo {} {string match {a[abc]c} abc}
  484.     foo
  485. } 1
  486. test stringComp-11.16 {string match} {
  487.     proc foo {} {string match {a[xyz]c} abc}
  488.     foo
  489. } 0
  490. test stringComp-11.17 {string match} {
  491.     proc foo {} {string match {12[2-7]45} 12345}
  492.     foo
  493. } 1
  494. test stringComp-11.18 {string match} {
  495.     proc foo {} {string match {12[ab2-4cd]45} 12345}
  496.     foo
  497. } 1
  498. test stringComp-11.19 {string match} {
  499.     proc foo {} {string match {12[ab2-4cd]45} 12b45}
  500.     foo
  501. } 1
  502. test stringComp-11.20 {string match} {
  503.     proc foo {} {string match {12[ab2-4cd]45} 12d45}
  504.     foo
  505. } 1
  506. test stringComp-11.21 {string match} {
  507.     proc foo {} {string match {12[ab2-4cd]45} 12145}
  508.     foo
  509. } 0
  510. test stringComp-11.22 {string match} {
  511.     proc foo {} {string match {12[ab2-4cd]45} 12545}
  512.     foo
  513. } 0
  514. test stringComp-11.23 {string match} {
  515.     proc foo {} {string match {a*b} a*b}
  516.     foo
  517. } 1
  518. test stringComp-11.24 {string match} {
  519.     proc foo {} {string match {a*b} ab}
  520.     foo
  521. } 0
  522. test stringComp-11.25 {string match} {
  523.     proc foo {} {string match {a*?[]\x} "a*?[]\x"}
  524.     foo
  525. } 1
  526. test stringComp-11.26 {string match} {
  527.     proc foo {} {string match ** ""}
  528.     foo
  529. } 1
  530. test stringComp-11.27 {string match} {
  531.     proc foo {} {string match *. ""}
  532.     foo
  533. } 0
  534. test stringComp-11.28 {string match} {
  535.     proc foo {} {string match "" ""}
  536.     foo
  537. } 1
  538. test stringComp-11.29 {string match} {
  539.     proc foo {} {string match [a a}
  540.     foo
  541. } 1
  542. test stringComp-11.30 {string match, bad args} {
  543.     proc foo {} {string match - b c}
  544.     list [catch {foo} msg] $msg
  545. } {1 {bad option "-": must be -nocase}}
  546. test stringComp-11.31 {string match case} {
  547.     proc foo {} {string match a A}
  548.     foo
  549. } 0
  550. test stringComp-11.32 {string match nocase} {
  551.     proc foo {} {string match -n a A}
  552.     foo
  553. } 1
  554. test stringComp-11.33 {string match nocase} {
  555.     proc foo {} {string match -nocase a334 A374}
  556.     foo
  557. } 1
  558. test stringComp-11.34 {string match nocase} {
  559.     proc foo {} {string match -nocase a*f ABCDEf}
  560.     foo
  561. } 1
  562. test stringComp-11.35 {string match case, false hope} {
  563.     # This is true because '_' lies between the A-Z and a-z ranges
  564.     proc foo {} {string match {[A-z]} _}
  565.     foo
  566. } 1
  567. test stringComp-11.36 {string match nocase range} {
  568.     # This is false because although '_' lies between the A-Z and a-z ranges,
  569.     # we lower case the end points before checking the ranges.
  570.     proc foo {} {string match -nocase {[A-z]} _}
  571.     foo
  572. } 0
  573. test stringComp-11.37 {string match nocase} {
  574.     proc foo {} {string match -nocase {[A-fh-Z]} g}
  575.     foo
  576. } 0
  577. test stringComp-11.38 {string match case, reverse range} {
  578.     proc foo {} {string match {[A-fh-Z]} g}
  579.     foo
  580. } 1
  581. test stringComp-11.39 {string match, * case} {
  582.     proc foo {} {string match {*abc} abc}
  583.     foo
  584. } 1
  585. test stringComp-11.40 {string match, *special case} {
  586.     proc foo {} {string match {*[ab]} abc}
  587.     foo
  588. } 0
  589. test stringComp-11.41 {string match, *special case} {
  590.     proc foo {} {string match {*[ab]*} abc}
  591.     foo
  592. } 1
  593. test stringComp-11.42 {string match, *special case} {
  594.     proc foo {} {string match "*\" "\"}
  595.     foo
  596. } 0
  597. test stringComp-11.43 {string match, *special case} {
  598.     proc foo {} {string match "*\\" "\"}
  599.     foo
  600. } 1
  601. test stringComp-11.44 {string match, *special case} {
  602.     proc foo {} {string match "*???" "12345"}
  603.     foo
  604. } 1
  605. test stringComp-11.45 {string match, *special case} {
  606.     proc foo {} {string match "*???" "12"}
  607.     foo
  608. } 0
  609. test stringComp-11.46 {string match, *special case} {
  610.     proc foo {} {string match "*\*" "abc*"}
  611.     foo
  612. } 1
  613. test stringComp-11.47 {string match, *special case} {
  614.     proc foo {} {string match "*\*" "*"}
  615.     foo
  616. } 1
  617. test stringComp-11.48 {string match, *special case} {
  618.     proc foo {} {string match "*\*" "*abc"}
  619.     foo
  620. } 0
  621. test stringComp-11.49 {string match, *special case} {
  622.     proc foo {} {string match "?\*" "a*"}
  623.     foo
  624. } 1
  625. test stringComp-11.50 {string match, *special case} {
  626.     proc foo {} {string match "\" "\"}
  627.     foo
  628. } 0
  629. test stringComp-11.51 {string match; *, -nocase and UTF-8} {
  630.     proc foo {} {string match -nocase [binary format I 717316707] 
  631.     [binary format I 2028036707]}
  632.     foo
  633. } 1
  634. test stringComp-11.52 {string match, null char in string} {
  635.     proc foo {} {
  636. set ptn "*abc*"
  637. foreach elem [list "u0000@abc" "@abc" "u0000@abcu0000" "blahabcblah"] {
  638.     lappend out [string match $ptn $elem]
  639. }
  640. set out
  641.     }
  642.     foo
  643. } {1 1 1 1}
  644. test stringComp-11.53 {string match, null char in pattern} {
  645.     proc foo {} {
  646. set out ""
  647. foreach {ptn elem} [list 
  648. "*u0000abcu0000"  "u0000abcu0000" 
  649. "*u0000abcu0000"  "u0000abcu0000ef" 
  650. "*u0000abcu0000*" "u0000abcu0000ef" 
  651. "*u0000abcu0000"  "@u0000abcu0000ef" 
  652. "*u0000abcu0000*"  "@u0000abcu0000ef" 
  653. ] {
  654.     lappend out [string match $ptn $elem]
  655. }
  656. set out
  657.     }
  658.     foo
  659. } {1 0 1 0 1}
  660. test stringComp-11.54 {string match, failure} {
  661.     proc foo {} {
  662. set longString ""
  663. for {set i 0} {$i < 10} {incr i} {
  664.     append longString "abcdefghijklmnopqrstuvwxyu0000z01234567890123"
  665. }
  666. list [string match *cba* $longString] 
  667. [string match *a*l*u0000* $longString] 
  668. [string match *a*l*u0000*123 $longString] 
  669. [string match *a*l*u0000*123* $longString] 
  670. [string match *a*l*u0000*cba* $longString] 
  671. [string match *===* $longString]
  672.     }
  673.     foo
  674. } {0 1 1 1 0 0}
  675. ## string range
  676. ## not yet bc
  677. ## string repeat
  678. ## not yet bc
  679. ## string replace
  680. ## not yet bc
  681. ## string tolower
  682. ## not yet bc
  683. ## string toupper
  684. ## not yet bc
  685. ## string totitle
  686. ## not yet bc
  687. ## string trim*
  688. ## not yet bc
  689. ## string word*
  690. ## not yet bc
  691. # cleanup
  692. ::tcltest::cleanupTests
  693. return