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

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  regexp, regsub
  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-1993 The Regents of the University of California.
  8. # Copyright (c) 1998 Sun Microsystems, Inc.
  9. # Copyright (c) 1998-1999 by Scriptics Corporation.
  10. #
  11. # See the file "license.terms" for information on usage and redistribution
  12. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  13. #
  14. # RCS: @(#) $Id$
  15. if {[lsearch [namespace children] ::tcltest] == -1} {
  16.     package require tcltest 2
  17.     namespace import -force ::tcltest::*
  18. }
  19. # Procedure to evaluate a script within a proc, to test compilation
  20. # functionality
  21. proc evalInProc { script } {
  22.     proc testProc {} $script
  23.     set status [catch {
  24. testProc 
  25.     } result]
  26.     rename testProc {}
  27.     return $result
  28.     #return [list $status $result]
  29. }
  30. catch {unset foo}
  31. test regexpComp-1.1 {basic regexp operation} {
  32.     evalInProc {
  33. regexp ab*c abbbc
  34.     }
  35. } 1
  36. test regexpComp-1.2 {basic regexp operation} {
  37.     evalInProc {
  38. regexp ab*c ac
  39.     }
  40. } 1
  41. test regexpComp-1.3 {basic regexp operation} {
  42.     evalInProc {    
  43. regexp ab*c ab
  44.     }
  45. } 0
  46. test regexpComp-1.4 {basic regexp operation} {
  47.     evalInProc {
  48. regexp -- -gorp abc-gorpxxx
  49.     }
  50. } 1
  51. test regexpComp-1.5 {basic regexp operation} {
  52.     evalInProc {
  53. regexp {^([^ ]*)[ ]*([^ ]*)} "" a
  54.     }
  55. } 1
  56. test regexpComp-1.6 {basic regexp operation} {
  57.     list [catch {regexp {} abc} msg] $msg
  58. } {0 1}
  59. test regexpComp-1.7 {regexp utf compliance} {
  60.     # if not UTF-8 aware, result is "0 1"
  61.     evalInProc {
  62. set foo "u4e4eb q"
  63. regexp "u4e4eb q" "au4e4eb qwu5e4ex4e wq" bar
  64. list [string compare $foo $bar] [regexp 4 $bar]
  65.     }
  66. } {0 0}
  67. test regexpComp-2.1 {getting substrings back from regexp} {
  68.     evalInProc {
  69. set foo {}
  70. list [regexp ab*c abbbbc foo] $foo
  71.     }
  72. } {1 abbbbc}
  73. test regexpComp-2.2 {getting substrings back from regexp} {
  74.     evalInProc {
  75. set foo {}
  76. set f2 {}
  77. list [regexp a(b*)c abbbbc foo f2] $foo $f2
  78.     }
  79. } {1 abbbbc bbbb}
  80. test regexpComp-2.3 {getting substrings back from regexp} {
  81.     evalInProc {
  82. set foo {}
  83. set f2 {}
  84. list [regexp a(b*)(c) abbbbc foo f2] $foo $f2
  85.     }
  86. } {1 abbbbc bbbb}
  87. test regexpComp-2.4 {getting substrings back from regexp} {
  88.     evalInProc {
  89. set foo {}
  90. set f2 {}
  91. set f3 {}
  92. list [regexp a(b*)(c) abbbbc foo f2 f3] $foo $f2 $f3
  93.     }
  94. } {1 abbbbc bbbb c}
  95. test regexpComp-2.5 {getting substrings back from regexp} {
  96.     evalInProc {
  97. set foo {}; set f1 {}; set f2 {}; set f3 {}; set f4 {}; set f5 {};
  98. set f6 {}; set f7 {}; set f8 {}; set f9 {}; set fa {}; set fb {};
  99. list [regexp (1*)(2*)(3*)(4*)(5*)(6*)(7*)(8*)(9*)(a*)(b*) 
  100. 12223345556789999aabbb 
  101. foo f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb] $foo $f1 $f2 $f3 $f4 $f5 
  102. $f6 $f7 $f8 $f9 $fa $fb
  103.     }
  104. } {1 12223345556789999aabbb 1 222 33 4 555 6 7 8 9999 aa bbb}
  105. test regexpComp-2.6 {getting substrings back from regexp} {
  106.     evalInProc {
  107. set foo 2; set f2 2; set f3 2; set f4 2
  108. list [regexp (a)(b)? xay foo f2 f3 f4] $foo $f2 $f3 $f4
  109.     }
  110. } {1 a a {} {}}
  111. test regexpComp-2.7 {getting substrings back from regexp} {
  112.     evalInProc {
  113. set foo 1; set f2 1; set f3 1; set f4 1
  114. list [regexp (a)(b)?(c) xacy foo f2 f3 f4] $foo $f2 $f3 $f4
  115.     }
  116. } {1 ac a {} c}
  117. test regexpComp-2.8 {getting substrings back from regexp} {
  118.     evalInProc {
  119. set match {}
  120. list [regexp {^a*b} aaaab match] $match
  121.     }
  122. } {1 aaaab}
  123. test regexpComp-3.1 {-indices option to regexp} {
  124.     evalInProc {
  125. set foo {}
  126. list [regexp -indices ab*c abbbbc foo] $foo
  127.     }
  128. } {1 {0 5}}
  129. test regexpComp-3.2 {-indices option to regexp} {
  130.     evalInProc {
  131. set foo {}
  132. set f2 {}
  133. list [regexp -indices a(b*)c abbbbc foo f2] $foo $f2
  134.     }
  135. } {1 {0 5} {1 4}}
  136. test regexpComp-3.3 {-indices option to regexp} {
  137.     evalInProc {
  138. set foo {}
  139. set f2 {}
  140. list [regexp -indices a(b*)(c) abbbbc foo f2] $foo $f2
  141.     }
  142. } {1 {0 5} {1 4}}
  143. test regexpComp-3.4 {-indices option to regexp} {
  144.     evalInProc {
  145. set foo {}
  146. set f2 {}
  147. set f3 {}
  148. list [regexp -indices a(b*)(c) abbbbc foo f2 f3] $foo $f2 $f3
  149.     }
  150. } {1 {0 5} {1 4} {5 5}}
  151. test regexpComp-3.5 {-indices option to regexp} {
  152.     evalInProc {
  153. set foo {}; set f1 {}; set f2 {}; set f3 {}; set f4 {}; set f5 {};
  154. set f6 {}; set f7 {}; set f8 {}; set f9 {}
  155. list [regexp -indices (1*)(2*)(3*)(4*)(5*)(6*)(7*)(8*)(9*) 
  156. 12223345556789999 
  157. foo f1 f2 f3 f4 f5 f6 f7 f8 f9] $foo $f1 $f2 $f3 $f4 $f5 
  158. $f6 $f7 $f8 $f9
  159.     }
  160. } {1 {0 16} {0 0} {1 3} {4 5} {6 6} {7 9} {10 10} {11 11} {12 12} {13 16}}
  161. test regexpComp-3.6 {getting substrings back from regexp} {
  162.     evalInProc {
  163. set foo 2; set f2 2; set f3 2; set f4 2
  164. list [regexp -indices (a)(b)? xay foo f2 f3 f4] $foo $f2 $f3 $f4
  165.     }
  166. } {1 {1 1} {1 1} {-1 -1} {-1 -1}}
  167. test regexpComp-3.7 {getting substrings back from regexp} {
  168.     evalInProc {
  169. set foo 1; set f2 1; set f3 1; set f4 1
  170. list [regexp -indices (a)(b)?(c) xacy foo f2 f3 f4] $foo $f2 $f3 $f4
  171.     }
  172. } {1 {1 2} {1 1} {-1 -1} {2 2}}
  173. test regexpComp-4.1 {-nocase option to regexp} {
  174.     evalInProc {
  175. regexp -nocase foo abcFOo
  176.     }
  177. } 1
  178. test regexpComp-4.2 {-nocase option to regexp} {
  179.     evalInProc {
  180. set f1 22
  181. set f2 33
  182. set f3 44
  183. list [regexp -nocase {a(b*)([xy]*)z} aBbbxYXxxZ22 f1 f2 f3] $f1 $f2 $f3
  184.     }
  185. } {1 aBbbxYXxxZ Bbb xYXxx}
  186. test regexpComp-4.3 {-nocase option to regexp} {
  187.     evalInProc {
  188. regexp -nocase FOo abcFOo
  189.     }
  190. } 1
  191. set ::x abcdefghijklmnopqrstuvwxyz1234567890
  192. set ::x $x$x$x$x$x$x$x$x$x$x$x$x
  193. test regexpComp-4.4 {case conversion in regexp} {
  194.     evalInProc {
  195. list [regexp -nocase $::x $::x foo] $foo
  196.     }
  197. } "1 $x"
  198. catch {unset ::x}
  199. test regexpComp-5.1 {exercise cache of compiled expressions} {
  200.     evalInProc {
  201. regexp .*a b
  202. regexp .*b c
  203. regexp .*c d
  204. regexp .*d e
  205. regexp .*e f
  206. regexp .*a bbba
  207.     }
  208. } 1
  209. test regexpComp-5.2 {exercise cache of compiled expressions} {
  210.     evalInProc {
  211. regexp .*a b
  212. regexp .*b c
  213. regexp .*c d
  214. regexp .*d e
  215. regexp .*e f
  216. regexp .*b xxxb
  217.     }
  218. } 1
  219. test regexpComp-5.3 {exercise cache of compiled expressions} {
  220.     evalInProc {
  221. regexp .*a b
  222. regexp .*b c
  223. regexp .*c d
  224. regexp .*d e
  225. regexp .*e f
  226. regexp .*c yyyc
  227.     }
  228. } 1
  229. test regexpComp-5.4 {exercise cache of compiled expressions} {
  230.     evalInProc {
  231. regexp .*a b
  232. regexp .*b c
  233. regexp .*c d
  234. regexp .*d e
  235. regexp .*e f
  236. regexp .*d 1d
  237.     }
  238. } 1
  239. test regexpComp-5.5 {exercise cache of compiled expressions} {
  240.     evalInProc {
  241. regexp .*a b
  242. regexp .*b c
  243. regexp .*c d
  244. regexp .*d e
  245. regexp .*e f
  246. regexp .*e xe
  247.     }
  248. } 1
  249. test regexpComp-6.1 {regexp errors} {
  250.     evalInProc {
  251. list [catch {regexp a} msg] $msg
  252.     }
  253. } {1 {wrong # args: should be "regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?"}}
  254. test regexpComp-6.2 {regexp errors} {
  255.     evalInProc {
  256. list [catch {regexp -nocase a} msg] $msg
  257.     }
  258. } {1 {wrong # args: should be "regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?"}}
  259. test regexpComp-6.3 {regexp errors} {
  260.     evalInProc {
  261. list [catch {regexp -gorp a} msg] $msg
  262.     }
  263. } {1 {bad switch "-gorp": must be -all, -about, -indices, -inline, -expanded, -line, -linestop, -lineanchor, -nocase, -start, or --}}
  264. test regexpComp-6.4 {regexp errors} {
  265.     evalInProc {
  266. list [catch {regexp a( b} msg] $msg
  267.     }
  268. } {1 {couldn't compile regular expression pattern: parentheses () not balanced}}
  269. test regexpComp-6.5 {regexp errors} {
  270.     evalInProc {
  271. list [catch {regexp a( b} msg] $msg
  272.     }
  273. } {1 {couldn't compile regular expression pattern: parentheses () not balanced}}
  274. test regexpComp-6.6 {regexp errors} {
  275.     evalInProc {
  276. list [catch {regexp a a f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1 f1} msg] $msg
  277.     }
  278. } {0 1}
  279. test regexpComp-6.7 {regexp errors} {
  280.     evalInProc {
  281. list [catch {regexp (x)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.) xyzzy} msg] $msg
  282.     }
  283. } {0 0}
  284. test regexpComp-6.8 {regexp errors} {
  285.     evalInProc {
  286. catch {unset f1}
  287. set f1 44
  288. list [catch {regexp abc abc f1(f2)} msg] $msg
  289.     }
  290. } {1 {couldn't set variable "f1(f2)"}}
  291. test regexpComp-6.9 {regexp errors, -start bad int check} {
  292.     evalInProc {
  293. list [catch {regexp -start bogus {^$} {}} msg] $msg
  294.     }
  295. } {1 {expected integer but got "bogus"}}
  296. test regexpComp-7.1 {basic regsub operation} {
  297.     evalInProc {
  298. list [regsub aa+ xaxaaaxaa 111&222 foo] $foo
  299.     }
  300. } {1 xax111aaa222xaa}
  301. test regexpComp-7.2 {basic regsub operation} {
  302.     evalInProc {
  303. list [regsub aa+ aaaxaa &111 foo] $foo
  304.     }
  305. } {1 aaa111xaa}
  306. test regexpComp-7.3 {basic regsub operation} {
  307.     evalInProc {
  308. list [regsub aa+ xaxaaa 111& foo] $foo
  309.     }
  310. } {1 xax111aaa}
  311. test regexpComp-7.4 {basic regsub operation} {
  312.     evalInProc {
  313. list [regsub aa+ aaa 11&2&333 foo] $foo
  314.     }
  315. } {1 11aaa2aaa333}
  316. test regexpComp-7.5 {basic regsub operation} {
  317.     evalInProc {
  318. list [regsub aa+ xaxaaaxaa &2&333 foo] $foo
  319.     }
  320. } {1 xaxaaa2aaa333xaa}
  321. test regexpComp-7.6 {basic regsub operation} {
  322.     evalInProc {
  323. list [regsub aa+ xaxaaaxaa 1&22& foo] $foo
  324.     }
  325. } {1 xax1aaa22aaaxaa}
  326. test regexpComp-7.7 {basic regsub operation} {
  327.     evalInProc {
  328. list [regsub a(a+) xaxaaaxaa {11221} foo] $foo
  329.     }
  330. } {1 xax1aa22aaxaa}
  331. test regexpComp-7.8 {basic regsub operation} {
  332.     evalInProc {
  333. list [regsub a(a+) xaxaaaxaa {1\1221} foo] $foo
  334.     }
  335. } "1 {xax1\aa22aaxaa}"
  336. test regexpComp-7.9 {basic regsub operation} {
  337.     evalInProc {
  338. list [regsub a(a+) xaxaaaxaa {1\1221} foo] $foo
  339.     }
  340. } "1 {xax1\122aaxaa}"
  341. test regexpComp-7.10 {basic regsub operation} {
  342.     evalInProc {
  343. list [regsub a(a+) xaxaaaxaa {1\&1} foo] $foo
  344.     }
  345. } "1 {xax1\aaaaaxaa}"
  346. test regexpComp-7.11 {basic regsub operation} {
  347.     evalInProc {
  348. list [regsub a(a+) xaxaaaxaa {1&1} foo] $foo
  349.     }
  350. } {1 xax1&aaxaa}
  351. test regexpComp-7.12 {basic regsub operation} {
  352.     evalInProc {
  353. list [regsub a(a+) xaxaaaxaa {1111&&} foo] $foo
  354.     }
  355. } {1 xaxaaaaaaaaaaaaaaxaa}
  356. test regexpComp-7.13 {basic regsub operation} {
  357.     evalInProc {
  358. set foo xxx
  359. list [regsub abc xyz 111 foo] $foo
  360.     }
  361. } {0 xyz}
  362. test regexpComp-7.14 {basic regsub operation} {
  363.     evalInProc {
  364. set foo xxx
  365. list [regsub ^ xyz "111 " foo] $foo
  366.     }
  367. } {1 {111 xyz}}
  368. test regexpComp-7.15 {basic regsub operation} {
  369.     evalInProc {
  370. set foo xxx
  371. list [regsub -- -foo abc-foodef "111 " foo] $foo
  372.     }
  373. } {1 {abc111 def}}
  374. test regexpComp-7.16 {basic regsub operation} {
  375.     evalInProc {
  376. set foo xxx
  377. list [regsub x "" y foo] $foo
  378.     }
  379. } {0 {}}
  380. test regexpComp-7.17 {regsub utf compliance} {
  381.     evalInProc {
  382. # if not UTF-8 aware, result is "0 1"
  383. set foo "xyz555ijkau4e4ebpqr"
  384. regsub au4e4eb xyzau4e4ebijkau4e4ebpqr 555 bar
  385. list [string compare $foo $bar] [regexp 4 $bar]
  386.     }
  387. } {0 0}
  388. test regexpComp-8.1 {case conversion in regsub} {
  389.     evalInProc {
  390. list [regsub -nocase a(a+) xaAAaAAay & foo] $foo
  391.     }
  392. } {1 xaAAaAAay}
  393. test regexpComp-8.2 {case conversion in regsub} {
  394.     evalInProc {
  395. list [regsub -nocase a(a+) xaAAaAAay & foo] $foo
  396.     }
  397. } {1 xaAAaAAay}
  398. test regexpComp-8.3 {case conversion in regsub} {
  399.     evalInProc {
  400. set foo 123
  401. list [regsub a(a+) xaAAaAAay & foo] $foo
  402.     }
  403. } {0 xaAAaAAay}
  404. test regexpComp-8.4 {case conversion in regsub} {
  405.     evalInProc {
  406. set foo 123
  407. list [regsub -nocase a CaDE b foo] $foo
  408.     }
  409. } {1 CbDE}
  410. test regexpComp-8.5 {case conversion in regsub} {
  411.     evalInProc {
  412. set foo 123
  413. list [regsub -nocase XYZ CxYzD b foo] $foo
  414.     }
  415. } {1 CbD}
  416. test regexpComp-8.6 {case conversion in regsub} {
  417.     evalInProc {
  418. set x abcdefghijklmnopqrstuvwxyz1234567890
  419. set x $x$x$x$x$x$x$x$x$x$x$x$x
  420. set foo 123
  421. list [regsub -nocase $x $x b foo] $foo
  422.     }
  423. } {1 b}
  424. test regexpComp-9.1 {-all option to regsub} {
  425.     evalInProc {
  426. set foo 86
  427. list [regsub -all x+ axxxbxxcxdx |&| foo] $foo
  428.     }
  429. } {4 a|xxx|b|xx|c|x|d|x|}
  430. test regexpComp-9.2 {-all option to regsub} {
  431.     evalInProc {
  432. set foo 86
  433. list [regsub -nocase -all x+ aXxXbxxcXdx |&| foo] $foo
  434.     }
  435. } {4 a|XxX|b|xx|c|X|d|x|}
  436. test regexpComp-9.3 {-all option to regsub} {
  437.     evalInProc {
  438. set foo 86
  439. list [regsub x+ axxxbxxcxdx |&| foo] $foo
  440.     }
  441. } {1 a|xxx|bxxcxdx}
  442. test regexpComp-9.4 {-all option to regsub} {
  443.     evalInProc {
  444. set foo 86
  445. list [regsub -all bc axxxbxxcxdx |&| foo] $foo
  446.     }
  447. } {0 axxxbxxcxdx}
  448. test regexpComp-9.5 {-all option to regsub} {
  449.     evalInProc {
  450. set foo xxx
  451. list [regsub -all node "node node more" yy foo] $foo
  452.     }
  453. } {2 {yy yy more}}
  454. test regexpComp-9.6 {-all option to regsub} {
  455.     evalInProc {
  456. set foo xxx
  457. list [regsub -all ^ xxx 123 foo] $foo
  458.     }
  459. } {1 123xxx}
  460. test regexpComp-10.1 {expanded syntax in regsub} {
  461.     evalInProc {
  462. set foo xxx
  463. list [regsub -expanded ". #commentn  . #comment2" abc def foo] $foo
  464.     }
  465. } {1 defc}
  466. test regexpComp-10.2 {newline sensitivity in regsub} {
  467.     evalInProc {
  468. set foo xxx
  469. list [regsub -line {^a.*b$} "dabcnaxybn" 123 foo] $foo
  470.     }
  471. } "1 {dabcn123n}"
  472. test regexpComp-10.3 {newline sensitivity in regsub} {
  473.     evalInProc {
  474. set foo xxx
  475. list [regsub -line {^a.*b$} "dabcnaxybnxb" 123 foo] $foo
  476.     }
  477. } "1 {dabcn123nxb}"
  478. test regexpComp-10.4 {partial newline sensitivity in regsub} {
  479.     evalInProc {
  480. set foo xxx
  481. list [regsub -lineanchor {^a.*b$} "danaxybnxb" 123 foo] $foo
  482.     }
  483. } "1 {dan123}"
  484. test regexpComp-10.5 {inverse partial newline sensitivity in regsub} {
  485.     evalInProc {
  486. set foo xxx
  487. list [regsub -linestop {a.*b} "danbaxybnxb" 123 foo] $foo
  488.     }
  489. } "1 {danb123nxb}"
  490. test regexpComp-11.1 {regsub errors} {
  491.     evalInProc {
  492. list [catch {regsub a b} msg] $msg
  493.     }
  494. } {1 {wrong # args: should be "regsub ?switches? exp string subSpec ?varName?"}}
  495. test regexpComp-11.2 {regsub errors} {
  496.     evalInProc {
  497. list [catch {regsub -nocase a b} msg] $msg
  498.     }
  499. } {1 {wrong # args: should be "regsub ?switches? exp string subSpec ?varName?"}}
  500. test regexpComp-11.3 {regsub errors} {
  501.     evalInProc {
  502. list [catch {regsub -nocase -all a b} msg] $msg
  503.     }
  504. } {1 {wrong # args: should be "regsub ?switches? exp string subSpec ?varName?"}}
  505. test regexpComp-11.4 {regsub errors} {
  506.     evalInProc {
  507. list [catch {regsub a b c d e f} msg] $msg
  508.     }
  509. } {1 {wrong # args: should be "regsub ?switches? exp string subSpec ?varName?"}}
  510. test regexpComp-11.5 {regsub errors} {
  511.     evalInProc {
  512. list [catch {regsub -gorp a b c} msg] $msg
  513.     }
  514. } {1 {bad switch "-gorp": must be -all, -nocase, -expanded, -line, -linestop, -lineanchor, -start, or --}}
  515. test regexpComp-11.6 {regsub errors} {
  516.     evalInProc {
  517. list [catch {regsub -nocase a( b c d} msg] $msg
  518.     }
  519. } {1 {couldn't compile regular expression pattern: parentheses () not balanced}}
  520. test regexpComp-11.7 {regsub errors} {
  521.     evalInProc {
  522. catch {unset f1}
  523. set f1 44
  524. list [catch {regsub -nocase aaa aaa xxx f1(f2)} msg] $msg
  525.     }
  526. } {1 {couldn't set variable "f1(f2)"}}
  527. test regexpComp-11.8 {regsub errors, -start bad int check} {
  528.     evalInProc {
  529. list [catch {regsub -start bogus pattern string rep var} msg] $msg
  530.     }
  531. } {1 {expected integer but got "bogus"}}
  532. # This test crashes on the Mac unless you increase the Stack Space to about 1
  533. # Meg.  This is probably bigger than most users want... 
  534. # 8.2.3 regexp reduced stack space requirements, but this should be
  535. # tested again
  536. test regexpComp-12.1 {Tcl_RegExpExec: large number of subexpressions} {macCrash} {
  537.     evalInProc {
  538. list [regexp (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.) abcdefghijklmnopqrstuvwxyz all 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] $all $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
  539.     }
  540. } {1 abcdefghijklmnopqrstuvwxyz 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}
  541. test regexpComp-13.1 {regsub of a very large string} {
  542.     # This test is designed to stress the memory subsystem in order
  543.     # to catch Bug #933.  It only fails if the Tcl memory allocator
  544.     # is in use.
  545.     set line {BEGIN_TABLE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; END_TABLE}
  546.     set filedata [string repeat $line 200]
  547.     for {set i 1} {$i<10} {incr i} {
  548. regsub -all "BEGIN_TABLE " $filedata "" newfiledata
  549.     }
  550.     set x done
  551. } {done}
  552. test regexpComp-14.1 {CompileRegexp: regexp cache} {
  553.     evalInProc {
  554. regexp .*a b
  555. regexp .*b c
  556. regexp .*c d
  557. regexp .*d e
  558. regexp .*e f
  559. set x .
  560. append x *a
  561. regexp $x bbba
  562.     }
  563. } 1
  564. test regexpComp-14.2 {CompileRegexp: regexp cache, different flags} {
  565.     evalInProc {
  566. regexp .*a b
  567. regexp .*b c
  568. regexp .*c d
  569. regexp .*d e
  570. regexp .*e f
  571. set x .
  572. append x *a
  573. regexp -nocase $x bbba
  574.     }
  575. } 1
  576. testConstraint exec [llength [info commands exec]]
  577. test regexpComp-14.3 {CompileRegexp: regexp cache, empty regexp and empty cache} -constraints {
  578. exec
  579. } -setup {
  580.     set junk [makeFile {puts [regexp {} foo]} junk.tcl]
  581. } -body {
  582.     exec [interpreter] $junk
  583. } -cleanup {
  584.     removeFile junk.tcl
  585. } -result 1
  586. test regexpComp-15.1 {regexp -start} {
  587.     catch {unset x}
  588.     list [regexp -start -10 {d} 1abc2de3 x] $x
  589. } {1 1}
  590. test regexpComp-15.2 {regexp -start} {
  591.     catch {unset x}
  592.     list [regexp -start 2 {d} 1abc2de3 x] $x
  593. } {1 2}
  594. test regexpComp-15.3 {regexp -start} {
  595.     catch {unset x}
  596.     list [regexp -start 4 {d} 1abc2de3 x] $x
  597. } {1 2}
  598. test regexpComp-15.4 {regexp -start} {
  599.     catch {unset x}
  600.     list [regexp -start 5 {d} 1abc2de3 x] $x
  601. } {1 3}
  602. test regexpComp-15.5 {regexp -start, over end of string} {
  603.     catch {unset x}
  604.     list [regexp -start [string length 1abc2de3] {d} 1abc2de3 x] [info exists x]
  605. } {0 0}
  606. test regexpComp-15.6 {regexp -start, loss of ^$ behavior} {
  607.     list [regexp -start 2 {^$} {}]
  608. } {0}
  609. test regexpComp-16.1 {regsub -start} {
  610.     catch {unset x}
  611.     list [regsub -all -start 2 {d} a1b2c3d4e5 {/&} x] $x
  612. } {4 a1b/2c/3d/4e/5}
  613. test regexpComp-16.2 {regsub -start} {
  614.     catch {unset x}
  615.     list [regsub -all -start -25 {z} hello {/&} x] $x
  616. } {0 hello}
  617. test regexpComp-16.3 {regsub -start} {
  618.     catch {unset x}
  619.     list [regsub -all -start 3 {z} hello {/&} x] $x
  620. } {0 hello}
  621. test regexpComp-16.4 {regsub -start, A behavior} {
  622.     set out {}
  623.     lappend out [regsub -start 0 -all {A(w)} {abcde} {/1} x] $x
  624.     lappend out [regsub -start 2 -all {A(w)} {abcde} {/1} x] $x
  625. } {5 /a/b/c/d/e 3 ab/c/d/e}
  626. test regexpComp-17.1 {regexp -inline} {
  627.     regexp -inline b ababa
  628. } {b}
  629. test regexpComp-17.2 {regexp -inline} {
  630.     regexp -inline (b) ababa
  631. } {b b}
  632. test regexpComp-17.3 {regexp -inline -indices} {
  633.     regexp -inline -indices (b) ababa
  634. } {{1 1} {1 1}}
  635. test regexpComp-17.4 {regexp -inline} {
  636.     regexp -inline {w(d+)w} "   hello 23 there456def "
  637. } {e456d 456}
  638. test regexpComp-17.5 {regexp -inline no matches} {
  639.     regexp -inline {w(d+)w} ""
  640. } {}
  641. test regexpComp-17.6 {regexp -inline no matches} {
  642.     regexp -inline hello goodbye
  643. } {}
  644. test regexpComp-17.7 {regexp -inline, no matchvars allowed} {
  645.     list [catch {regexp -inline b abc match} msg] $msg
  646. } {1 {regexp match variables not allowed when using -inline}}
  647. test regexpComp-18.1 {regexp -all} {
  648.     regexp -all b bbbbb
  649. } {5}
  650. test regexpComp-18.2 {regexp -all} {
  651.     regexp -all b abababbabaaaaaaaaaab
  652. } {6}
  653. test regexpComp-18.3 {regexp -all -inline} {
  654.     regexp -all -inline b abababbabaaaaaaaaaab
  655. } {b b b b b b}
  656. test regexpComp-18.4 {regexp -all -inline} {
  657.     regexp -all -inline {w(w)} abcdefg
  658. } {ab b cd d ef f}
  659. test regexpComp-18.5 {regexp -all -inline} {
  660.     regexp -all -inline {w(w)$} abcdefg
  661. } {fg g}
  662. test regexpComp-18.6 {regexp -all -inline} {
  663.     regexp -all -inline {d+} 10:20:30:40
  664. } {10 20 30 40}
  665. test regexpComp-18.7 {regexp -all -inline} {
  666.     list [catch {regexp -all -inline b abc match} msg] $msg
  667. } {1 {regexp match variables not allowed when using -inline}}
  668. test regexpComp-18.8 {regexp -all} {
  669.     # This should not cause an infinite loop
  670.     regexp -all -inline {a*} a
  671. } {a}
  672. test regexpComp-18.9 {regexp -all} {
  673.     # Yes, the expected result is {a {}}.  Here's why:
  674.     # Start at index 0; a* matches the "a" there then stops.
  675.     # Go to index 1; a* matches the lambda (or {}) there then stops.  Recall
  676.     #   that a* matches zero or more "a"'s; thus it matches the string "b", as
  677.     #   there are zero or more "a"'s there.
  678.     # Go to index 2; this is past the end of the string, so stop.
  679.     regexp -all -inline {a*} ab
  680. } {a {}}
  681. test regexpComp-18.10 {regexp -all} {
  682.     # Yes, the expected result is {a {} a}.  Here's why:
  683.     # Start at index 0; a* matches the "a" there then stops.
  684.     # Go to index 1; a* matches the lambda (or {}) there then stops.   Recall
  685.     #   that a* matches zero or more "a"'s; thus it matches the string "b", as
  686.     #   there are zero or more "a"'s there.
  687.     # Go to index 2; a* matches the "a" there then stops.
  688.     # Go to index 3; this is past the end of the string, so stop.
  689.     regexp -all -inline {a*} aba
  690. } {a {} a}
  691. test regexpComp-18.11 {regexp -all} {
  692.     evalInProc {
  693. regexp -all -inline {^a} aaaa
  694.     }
  695. } {a}
  696. test regexpComp-18.12 {regexp -all -inline -indices} {
  697.     evalInProc {
  698. regexp -all -inline -indices a(b(c)d|e(f)g)h abcdhaefgh
  699.     }
  700. } {{0 4} {1 3} {2 2} {-1 -1} {5 9} {6 8} {-1 -1} {7 7}}
  701. test regexpComp-19.1 {regsub null replacement} {
  702.     evalInProc {
  703. regsub -all {@} {@hel@lo@} "a" result
  704. list $result [string length $result]
  705.     }
  706. } "ahelaloa 14"
  707. test regexpComp-20.1 {regsub shared object shimmering} {
  708.     evalInProc {
  709. # Bug #461322
  710. set a abcdefghijklmnopqurstuvwxyz 
  711. set b $a 
  712. set c abcdefghijklmnopqurstuvwxyz0123456789 
  713. regsub $a $c $b d 
  714. list $d [string length $d] [string bytelength $d]
  715.     }
  716. } [list abcdefghijklmnopqurstuvwxyz0123456789 37 37]
  717. test regexpComp-20.2 {regsub shared object shimmering with -about} {
  718.     evalInProc {
  719. eval regexp -about abc
  720.     }
  721. } {0 {}}
  722. test regexpComp-21.1 {regexp command compiling tests} {
  723.     evalInProc {
  724. regexp foo bar
  725.     }
  726. } 0
  727. test regexpComp-21.2 {regexp command compiling tests} {
  728.     evalInProc {
  729. regexp {^foo$} dogfood
  730.     }
  731. } 0
  732. test regexpComp-21.3 {regexp command compiling tests} {
  733.     evalInProc {
  734. set a foo
  735. regexp {^foo$} $a
  736.     }
  737. } 1
  738. test regexpComp-21.4 {regexp command compiling tests} {
  739.     evalInProc {
  740. regexp foo dogfood
  741.     }
  742. } 1
  743. test regexpComp-21.5 {regexp command compiling tests} {
  744.     evalInProc {
  745. regexp -nocase FOO dogfod
  746.     }
  747. } 0
  748. test regexpComp-21.6 {regexp command compiling tests} {
  749.     evalInProc {
  750. regexp -n foo dogfoOd
  751.     }
  752. } 1
  753. test regexpComp-21.7 {regexp command compiling tests} {
  754.     evalInProc {
  755. regexp -no -- FoO dogfood
  756.     }
  757. } 1
  758. test regexpComp-21.8 {regexp command compiling tests} {
  759.     evalInProc {
  760. regexp -- foo dogfod
  761.     }
  762. } 0
  763. test regexpComp-21.9 {regexp command compiling tests} {
  764.     evalInProc {
  765. list [catch {regexp -- -nocase foo dogfod} msg] $msg
  766.     }
  767. } {0 0}
  768. test regexpComp-21.10 {regexp command compiling tests} {
  769.     evalInProc {
  770. list [regsub -all "" foo bar str] $str
  771.     }
  772. } {3 barfbarobaro}
  773. test regexpComp-21.11 {regexp command compiling tests} {
  774.     evalInProc {
  775. list [regsub -all "" "" bar str] $str
  776.     }
  777. } {0 {}}
  778. set i 0
  779. foreach {str exp result} {
  780.     foo ^foo 1
  781.     foobar ^foobar$ 1
  782.     foobar bar$ 1
  783.     foobar ^$ 0
  784.     "" ^$ 1
  785.     anything $ 1
  786.     anything ^.*$ 1
  787.     anything ^.*a$ 0
  788.     anything ^.*a.*$ 1
  789.     anything ^.*.*$ 1
  790.     anything ^.*..*$ 1
  791.     anything ^.*b$ 0
  792.     anything ^a.*$ 1
  793. } {
  794.     test regexpComp-22.[incr i] {regexp command compiling tests} 
  795.      [subst {evalInProc {set a "$str"; regexp {$exp} $a}}] $result
  796. }
  797. # cleanup
  798. ::tcltest::cleanupTests
  799. return