home *** CD-ROM | disk | FTP | other *** search
/ Ultra Pack / UltraComputing Partner Applications.iso / SunLabs / tclTK / src / tk4.0 / tests / textBTree.test < prev    next >
Encoding:
Text File  |  1994-12-17  |  20.5 KB  |  679 lines

  1. # This file is a Tcl script to test out the B-tree facilities of
  2. # Tk's text widget (the contents of the file "tkTextBTree.c".  There are
  3. # several file with additional tests for other features of text widgets.
  4. # This file is organized in the standard fashion for Tcl tests.
  5. #
  6. # Copyright (c) 1992-1994 The Regents of the University of California.
  7. # Copyright (c) 1994 Sun Microsystems, Inc.
  8. #
  9. # See the file "license.terms" for information on usage and redistribution
  10. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  11. #
  12. # @(#) textBTree.test 1.2 94/12/17 15:54:47
  13.  
  14. if {[string compare test [info procs test]] == 1} then \
  15.   {source defs}
  16.  
  17. catch {destroy .t}
  18. text .t
  19. .t debug on
  20.  
  21. test btree-1.1 {basic insertions} {
  22.     .t delete 1.0 100000.0
  23.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  24.     .t get 1.0 1000000.0
  25. } "Line 1\nLine 2\nLine 3\n"
  26. test btree-1.2 {basic insertions} {
  27.     .t delete 1.0 100000.0
  28.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  29.     .t insert 1.3 XXX
  30.     .t get 1.0 1000000.0
  31. } "LinXXXe 1\nLine 2\nLine 3\n"
  32. test btree-1.3 {basic insertions} {
  33.     .t delete 1.0 100000.0
  34.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  35.     .t insert 3.0 YYY
  36.     .t get 1.0 1000000.0
  37. } "Line 1\nLine 2\nYYYLine 3\n"
  38. test btree-1.4 {basic insertions} {
  39.     .t delete 1.0 100000.0
  40.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  41.     .t insert 2.1 X\nYY
  42.     .t get 1.0 1000000.0
  43. } "Line 1\nLX\nYYine 2\nLine 3\n"
  44. test btree-1.5 {basic insertions} {
  45.     .t delete 1.0 100000.0
  46.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  47.     .t insert 2.0 X\n\n\n
  48.     .t get 1.0 1000000.0
  49. } "Line 1\nX\n\n\nLine 2\nLine 3\n"
  50. test btree-1.6 {basic insertions} {
  51.     .t delete 1.0 100000.0
  52.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  53.     .t insert 2.6 X\n
  54.     .t get 1.0 1000000.0
  55. } "Line 1\nLine 2X\n\nLine 3\n"
  56. test btree-1.7 {insertion before start of text} {
  57.     .t delete 1.0 100000.0
  58.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  59.     .t insert 0.4 XXX
  60.     .t get 1.0 1000000.0
  61. } "XXXLine 1\nLine 2\nLine 3\n"
  62. test btree-1.8 {insertion past end of text} {
  63.     .t delete 1.0 100000.0
  64.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  65.     .t insert 100.0 ZZ
  66.     .t get 1.0 1000000.0
  67. } "Line 1\nLine 2\nLine 3ZZ\n"
  68. test btree-1.9 {insertion before start of line} {
  69.     .t delete 1.0 100000.0
  70.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  71.     .t insert 2.-3 Q
  72.     .t get 1.0 1000000.0
  73. } "Line 1\nQLine 2\nLine 3\n"
  74. test btree-1.10 {insertion past end of line} {
  75.     .t delete 1.0 100000.0
  76.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  77.     .t insert 2.40 XYZZY
  78.     .t get 1.0 1000000.0
  79. } "Line 1\nLine 2XYZZY\nLine 3\n"
  80. test btree-1.11 {insertion past end of last line} {
  81.     .t delete 1.0 100000.0
  82.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  83.     .t insert 3.40 ABC
  84.     .t get 1.0 1000000.0
  85. } "Line 1\nLine 2\nLine 3ABC\n"
  86.  
  87. test btree-2.1 {basic deletions} {
  88.     .t delete 1.0 100000.0
  89.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  90.     .t delete 1.0 1.3
  91.     .t get 1.0 1000000.0
  92. } "e 1\nLine 2\nLine 3\n"
  93. test btree-2.2 {basic deletions} {
  94.     .t delete 1.0 100000.0
  95.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  96.     .t delete 2.2
  97.     .t get 1.0 1000000.0
  98. } "Line 1\nLie 2\nLine 3\n"
  99. test btree-2.3 {basic deletions} {
  100.     .t delete 1.0 100000.0
  101.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  102.     .t delete 2.0 2.3
  103.     .t get 1.0 1000000.0
  104. } "Line 1\ne 2\nLine 3\n"
  105. test btree-2.4 {deleting whole lines} {
  106.     .t delete 1.0 100000.0
  107.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  108.     .t delete 1.2 3.0
  109.     .t get 1.0 1000000.0
  110. } "LiLine 3\n"
  111. test btree-2.5 {deleting whole lines} {
  112.     .t delete 1.0 100000.0
  113.     .t insert 1.0 "Line 1\nLine 2\n\n\nLine 5"
  114.     .t delete 1.0 5.2
  115.     .t get 1.0 1000000.0
  116. } "ne 5\n"
  117. test btree-2.6 {deleting before start of file} {
  118.     .t delete 1.0 100000.0
  119.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  120.     .t delete 0.3 1.2
  121.     .t get 1.0 1000000.0
  122. } "ne 1\nLine 2\nLine 3\n"
  123. test btree-2.7 {deleting after end of file} {
  124.     .t delete 1.0 100000.0
  125.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  126.     .t delete 10.3
  127.     .t get 1.0 1000000.0
  128. } "Line 1\nLine 2\nLine 3\n"
  129. test btree-2.8 {deleting before start of line} {
  130.     .t delete 1.0 100000.0
  131.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  132.     .t delete 3.-1 3.3
  133.     .t get 1.0 1000000.0
  134. } "Line 1\nLine 2\ne 3\n"
  135. test btree-2.9 {deleting before start of line} {
  136.     .t delete 1.0 100000.0
  137.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  138.     .t delete 1.-1 1.0
  139.     .t get 1.0 1000000.0
  140. } "Line 1\nLine 2\nLine 3\n"
  141. test btree-2.10 {deleting after end of line} {
  142.     .t delete 1.0 100000.0
  143.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  144.     .t delete 1.8 2.1
  145.     .t get 1.0 1000000.0
  146. } "Line 1ine 2\nLine 3\n"
  147. test btree-2.11 {deleting after end of last line} {
  148.     .t delete 1.0 100000.0
  149.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  150.     .t delete 3.8 4.1
  151.     .t get 1.0 1000000.0
  152. } "Line 1\nLine 2\nLine 3\n"
  153. test btree-2.12 {deleting before start of file} {
  154.     .t delete 1.0 100000.0
  155.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  156.     .t delete 1.8 0.0
  157.     .t get 1.0 1000000.0
  158. } "Line 1\nLine 2\nLine 3\n"
  159. test btree-2.13 {deleting past end of file} {
  160.     .t delete 1.0 100000.0
  161.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  162.     .t delete 1.8 4.0
  163.     .t get 1.0 1000000.0
  164. } "Line 1\n"
  165. test btree-2.14 {deleting with end before start of line} {
  166.     .t delete 1.0 100000.0
  167.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  168.     .t delete 1.3 2.-3
  169.     .t get 1.0 1000000.0
  170. } "LinLine 2\nLine 3\n"
  171. test btree-2.15 {deleting past end of line} {
  172.     .t delete 1.0 100000.0
  173.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  174.     .t delete 1.3 1.9
  175.     .t get 1.0 1000000.0
  176. } "Lin\nLine 2\nLine 3\n"
  177. test btree-2.16 {deleting past end of line} {
  178.     .t delete 1.0 100000.0
  179.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  180.     .t delete 3.2 3.15
  181.     .t get 1.0 1000000.0
  182. } "Line 1\nLine 2\nLi\n"
  183. test btree-2.17 {deleting past end of line} {
  184.     .t delete 1.0 100000.0
  185.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  186.     .t delete 3.0 3.15
  187.     .t get 1.0 1000000.0
  188. } "Line 1\nLine 2\n\n"
  189. test btree-2.18 {deleting past end of line} {
  190.     .t delete 1.0 100000.0
  191.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  192.     .t delete 1.0 3.15
  193.     .t get 1.0 1000000.0
  194. } "\n"
  195. test btree-2.19 {deleting with negative range} {
  196.     .t delete 1.0 100000.0
  197.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  198.     .t delete 3.2 2.4
  199.     .t get 1.0 1000000.0
  200. } "Line 1\nLine 2\nLine 3\n"
  201. test btree-2.20 {deleting with negative range} {
  202.     .t delete 1.0 100000.0
  203.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  204.     .t delete 3.2 3.1
  205.     .t get 1.0 1000000.0
  206. } "Line 1\nLine 2\nLine 3\n"
  207. test btree-2.21 {deleting with negative range} {
  208.     .t delete 1.0 100000.0
  209.     .t insert 1.0 "Line 1\nLine 2\nLine 3"
  210.     .t delete 3.2 3.2
  211.     .t get 1.0 1000000.0
  212. } "Line 1\nLine 2\nLine 3\n"
  213.  
  214. proc setup {} {
  215.     .t delete 1.0 100000.0
  216.     .t tag delete x y
  217.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  218.     .t tag add x 1.1
  219.     .t tag add x 1.5 1.13
  220.     .t tag add x 2.2 2.6
  221.     .t tag add y 1.5
  222. }
  223.  
  224. test btree-3.1 {inserting with tags} {
  225.     setup
  226.     .t insert 1.0 XXX
  227.     list [.t tag ranges x] [.t tag ranges y]
  228. } {{1.4 1.5 1.8 1.16 2.2 2.6} {1.8 1.9}}
  229. test btree-3.2 {inserting with tags} {
  230.     setup
  231.     .t insert 1.15 YYY
  232.     list [.t tag ranges x] [.t tag ranges y]
  233. } {{1.1 1.2 1.5 1.13 2.2 2.6} {1.5 1.6}}
  234. test btree-3.3 {inserting with tags} {
  235.     setup
  236.     .t insert 1.7 ZZZZ
  237.     list [.t tag ranges x] [.t tag ranges y]
  238. } {{1.1 1.2 1.5 1.17 2.2 2.6} {1.5 1.6}}
  239. test btree-3.4 {inserting with tags} {
  240.     setup
  241.     .t insert 1.7 \n\n
  242.     list [.t tag ranges x] [.t tag ranges y]
  243. } {{1.1 1.2 1.5 3.6 4.2 4.6} {1.5 1.6}}
  244. test btree-3.5 {inserting with tags} {
  245.     setup
  246.     .t insert 1.5 A\n
  247.     list [.t tag ranges x] [.t tag ranges y]
  248. } {{1.1 1.2 2.0 2.8 3.2 3.6} {2.0 2.1}}
  249. test btree-3.6 {inserting with tags} {
  250.     setup
  251.     .t insert 1.13 A\n
  252.     list [.t tag ranges x] [.t tag ranges y]
  253. } {{1.1 1.2 1.5 1.13 3.2 3.6} {1.5 1.6}}
  254.  
  255. test btree-4.1 {deleting with tags} {
  256.     setup
  257.     .t delete 1.6 1.9
  258.     list [.t tag ranges x] [.t tag ranges y]
  259. } {{1.1 1.2 1.5 1.10 2.2 2.6} {1.5 1.6}}
  260. test btree-4.2 {deleting with tags} {
  261.     setup
  262.     .t delete 1.1 2.3
  263.     list [.t tag ranges x] [.t tag ranges y]
  264. } {{1.1 1.4} {}}
  265. test btree-4.3 {deleting with tags} {
  266.     setup
  267.     .t delete 1.4 2.1
  268.     list [.t tag ranges x] [.t tag ranges y]
  269. } {{1.1 1.2 1.5 1.9} {}}
  270. test btree-4.4 {deleting with tags} {
  271.     setup
  272.     .t delete 1.14 2.1
  273.     list [.t tag ranges x] [.t tag ranges y]
  274. } {{1.1 1.2 1.5 1.13 1.15 1.19} {1.5 1.6}}
  275. test btree-4.5 {deleting with tags} {
  276.     setup
  277.     .t delete 1.0 2.10
  278.     list [.t tag ranges x] [.t tag ranges y]
  279. } {{} {}}
  280. test btree-4.6 {deleting with tags} {
  281.     setup
  282.     .t delete 1.0 1.5
  283.     list [.t tag ranges x] [.t tag ranges y]
  284. } {{1.0 1.8 2.2 2.6} {1.0 1.1}}
  285. test btree-4.7 {deleting with tags} {
  286.     setup
  287.     .t delete 1.6 1.9
  288.     list [.t tag ranges x] [.t tag ranges y]
  289. } {{1.1 1.2 1.5 1.10 2.2 2.6} {1.5 1.6}}
  290. test btree-4.8 {deleting with tags} {
  291.     setup
  292.     .t delete 1.5 1.13
  293.     list [.t tag ranges x] [.t tag ranges y]
  294. } {{1.1 1.2 2.2 2.6} {}}
  295.  
  296. set bigText1 {}
  297. for {set i 0} {$i < 10} {incr i} {
  298.     append bigText1 "Line $i\n"
  299. }
  300. set bigText2 {}
  301. for {set i 0} {$i < 200} {incr i} {
  302.     append bigText2 "Line $i\n"
  303. }
  304. test btree-5.1 {very large inserts, with tags} {
  305.     setup
  306.     .t insert 1.0 $bigText1
  307.     list [.t tag ranges x] [.t tag ranges y]
  308. } {{11.1 11.2 11.5 11.13 12.2 12.6} {11.5 11.6}}
  309. test btree-5.2 {very large inserts, with tags} {
  310.     setup
  311.     .t insert 1.2 $bigText2
  312.     list [.t tag ranges x] [.t tag ranges y]
  313. } {{1.1 1.2 201.3 201.11 202.2 202.6} {201.3 201.4}}
  314. test btree-5.3 {very large inserts, with tags} {
  315.     setup
  316.     for {set i 0} {$i < 200} {incr i} {
  317.     .t insert 1.8 "longer line $i\n"
  318.     }
  319.     list [.t tag ranges x] [.t tag ranges y] [.t get 1.0 1.100] [.t get 198.0 198.100]
  320. } {{1.1 1.2 1.5 201.5 202.2 202.6} {1.5 1.6} {Text forlonger line 199} {longer line 2}}
  321.  
  322. test btree-6.1 {very large deletes, with tags} {
  323.     setup
  324.     .t insert 1.1 $bigText2
  325.     .t delete 1.2 201.2
  326.     list [.t tag ranges x] [.t tag ranges y]
  327. } {{1.4 1.12 2.2 2.6} {1.4 1.5}}
  328. test btree-6.2 {very large deletes, with tags} {
  329.     setup
  330.     .t insert 1.1 $bigText2
  331.     for {set i 0} {$i < 200} {incr i} {
  332.     .t delete 1.2 2.2
  333.     }
  334.     list [.t tag ranges x] [.t tag ranges y]
  335. } {{1.4 1.12 2.2 2.6} {1.4 1.5}}
  336. test btree-6.3 {very large deletes, with tags} {
  337.     setup
  338.     .t insert 1.1 $bigText2
  339.     .t delete 2.3 10000.0
  340.     .t get 1.0 1000.0
  341. } {TLine 0
  342. Lin
  343. }
  344. test btree-6.4 {very large deletes, with tags} {
  345.     setup
  346.     .t insert 1.1 $bigText2
  347.     for {set i 0} {$i < 100} {incr i} {
  348.     .t delete 30.0 31.0
  349.     }
  350.     list [.t tag ranges x] [.t tag ranges y]
  351. } {{101.0 101.1 101.4 101.12 102.2 102.6} {101.4 101.5}}
  352. test btree-6.5 {very large deletes, with tags} {
  353.     setup
  354.     .t insert 1.1 $bigText2
  355.     for {set i 0} {$i < 100} {incr i} {
  356.     set j [expr $i+2]
  357.     set k [expr 1+2*$i]
  358.     .t tag add x $j.1 $j.3
  359.     .t tag add y $k.1 $k.6
  360.     }
  361.     .t delete 2.0 200.0
  362.     list [.t tag ranges x] [.t tag ranges y]
  363. } {{3.0 3.1 3.4 3.12 4.2 4.6} {1.1 1.6 3.4 3.5}}
  364. test btree-6.6 {very large deletes, with tags} {
  365.     setup
  366.     .t insert 1.1 $bigText2
  367.     for {set i 0} {$i < 100} {incr i} {
  368.     set j [expr $i+2]
  369.     set k [expr 1+2*$i]
  370.     .t tag add x $j.1 $j.3
  371.     .t tag add y $k.1 $k.6
  372.     }
  373.     for {set i 199} {$i >= 2} {incr i -1} {
  374.     .t delete $i.0 [expr $i+1].0
  375.     }
  376.     list [.t tag ranges x] [.t tag ranges y]
  377. } {{3.0 3.1 3.4 3.12 4.2 4.6} {1.1 1.6 3.4 3.5}}
  378.  
  379. .t delete 1.0 end
  380. .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  381. set i 1
  382. foreach check {
  383.     {1.3 1.6 1.7 2.0 {1.3 1.6 1.7 2.0}}
  384.     {1.3 1.6 1.6 2.0 {1.3 2.0}}
  385.     {1.3 1.6 1.4 2.0 {1.3 2.0}}
  386.     {2.0 4.3 1.4 1.10 {1.4 1.10 2.0 4.3}}
  387.     {2.0 4.3 1.4 1.end {1.4 1.19 2.0 4.3}}
  388.     {2.0 4.3 1.4 2.0 {1.4 4.3}}
  389.     {2.0 4.3 1.4 3.0 {1.4 4.3}}
  390.     {1.2 1.3 1.6 1.7 1.end 2.0 2.4 2.7 3.0 4.0 1.1 4.2 {1.1 4.2}}
  391.     {1.2 1.3 1.6 1.7 1.end 2.0 2.4 2.7 3.0 4.0 1.3 4.2 {1.2 4.2}}
  392.     {1.2 1.3 1.6 1.7 1.end 2.0 2.4 2.7 3.0 4.0 1.1 3.0 {1.1 4.0}}
  393.     {1.2 1.3 1.6 1.7 1.end 2.0 2.4 2.7 3.0 4.0 1.2 3.0 {1.2 4.0}}
  394. } {
  395.     test btree-7.$i {tag addition and removal} {
  396.     .t tag remove x 1.0 end
  397.     while {[llength $check] > 2} {
  398.         .t tag add x [lindex $check 0] [lindex $check 1]
  399.         set check [lrange $check 2 end]
  400.     }
  401.     .t tag ranges x
  402.     } [lindex $check [expr [llength $check]-1]]
  403.     incr i
  404. }
  405.  
  406. test btree-8.1 {tag addition and removal, weird ranges} {
  407.     .t delete 1.0 100000.0
  408.     .t tag delete x
  409.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  410.     .t tag add x 0.0 1.3
  411.     .t tag ranges x
  412. } {1.0 1.3}
  413. test btree-8.2 {tag addition and removal, weird ranges} {
  414.     .t delete 1.0 100000.0
  415.     .t tag delete x
  416.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  417.     .t tag add x 1.40 2.4
  418.     .t tag ranges x
  419. } {1.19 2.4}
  420. test btree-8.3 {tag addition and removal, weird ranges} {
  421.     .t delete 1.0 100000.0
  422.     .t tag delete x
  423.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  424.     .t tag add x 4.40 4.41
  425.     .t tag ranges x
  426. } {}
  427. test btree-8.4 {tag addition and removal, weird ranges} {
  428.     .t delete 1.0 100000.0
  429.     .t tag delete x
  430.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  431.     .t tag add x 5.1 5.2
  432.     .t tag ranges x
  433. } {}
  434. test btree-8.5 {tag addition and removal, weird ranges} {
  435.     .t delete 1.0 100000.0
  436.     .t tag delete x
  437.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  438.     .t tag add x 1.1 9.0
  439.     .t tag ranges x
  440. } {1.1 5.0}
  441. test btree-8.6 {tag addition and removal, weird ranges} {
  442.     .t delete 1.0 100000.0
  443.     .t tag delete x
  444.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  445.     .t tag add x 1.1 1.90
  446.     .t tag ranges x
  447. } {1.1 1.19}
  448. test btree-8.7 {tag addition and removal, weird ranges} {
  449.     .t delete 1.0 100000.0
  450.     .t tag delete x
  451.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  452.     .t tag add x 1.1 4.90
  453.     .t tag ranges x
  454. } {1.1 4.17}
  455. test btree-8.8 {tag addition and removal, weird ranges} {
  456.     .t delete 1.0 100000.0
  457.     .t tag delete x
  458.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  459.     .t tag add x 3.0 3.0
  460.     .t tag ranges x
  461. } {}
  462.  
  463. test btree-9.1 {tag names} {
  464.     setup
  465.     .t tag names
  466. } {sel x y}
  467. test btree-9.2 {tag names} {
  468.     setup
  469.     .t tag add tag1 1.8
  470.     .t tag add tag2 1.8
  471.     .t tag add tag3 1.7 1.9
  472.     .t tag names 1.8
  473. } {x tag1 tag2 tag3}
  474. test btree-9.3 {lots of tag names} {
  475.     setup
  476.     .t insert 1.2 $bigText2
  477.     foreach i {tag1 foo ThisOne {x space} q r s t} {
  478.     .t tag add $i 150.2
  479.     }
  480.     foreach i {u tagA tagB tagC and more {$} \{} {
  481.     .t tag add $i 150.1 150.3
  482.     }
  483.     .t tag names 150.2
  484. } {tag1 foo ThisOne {x space} q r s t u tagA tagB tagC and more {$} \{}
  485. test btree-9.4 {lots of tag names} {
  486.     setup
  487.     .t insert 1.2 $bigText2
  488.     .t tag delete tag1 foo ThisOne more {x space} q r s t u
  489.     .t tag delete tagA tagB tagC and {$} \{ more
  490.     foreach i {tag1 foo ThisOne more {x space} q r s t} {
  491.     .t tag add $i 150.2
  492.     }
  493.     foreach i {foo ThisOne u tagA tagB tagC and more {$} \{} {
  494.     .t tag add $i 150.4
  495.     }
  496.     .t tag delete tag1 more q r tagA
  497.     .t tag names 150.2
  498. } {foo ThisOne {x space} s t}
  499.  
  500. proc msetup {} {
  501.     .t delete 1.0 100000.0
  502.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  503.     .t mark set m1 1.2
  504.     .t mark set l1 1.2
  505.     .t mark gravity l1 left
  506.     .t mark set next 1.6
  507.     .t mark set x 1.6
  508.     .t mark set m2 2.0
  509.     .t mark set m3 2.100
  510.     .t tag add x 1.3 1.8
  511. }
  512. test btree-10.1 {basic mark facilities} {
  513.     msetup
  514.     list [lsort [.t mark names]] [.t index m1] [.t index m2] [.t index m3]
  515. } {{current insert l1 m1 m2 m3 next x} 1.2 2.0 2.11}
  516. test btree-10.2 {basic mark facilities} {
  517.     msetup
  518.     .t mark unset m2
  519.     lsort [.t mark names]
  520. } {current insert l1 m1 m3 next x}
  521. test btree-10.3 {basic mark facilities} {
  522.     msetup
  523.     .t mark set m2 1.8
  524.     list [lsort [.t mark names]] [.t index m1] [.t index m2] [.t index m3]
  525. } {{current insert l1 m1 m2 m3 next x} 1.2 1.8 2.11}
  526.  
  527. test btree-11.1 {marks and inserts} {
  528.     msetup
  529.     .t insert 1.1 abcde
  530.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  531. } {1.7 1.7 1.11 1.11 2.0 2.11}
  532. test btree-11.2 {marks and inserts} {
  533.     msetup
  534.     .t insert 1.2 abcde
  535.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  536. } {1.2 1.7 1.11 1.11 2.0 2.11}
  537. test btree-11.3 {marks and inserts} {
  538.     msetup
  539.     .t insert 1.3 abcde
  540.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  541. } {1.2 1.2 1.11 1.11 2.0 2.11}
  542. test btree-11.4 {marks and inserts} {
  543.     msetup
  544.     .t insert 1.1 ab\n\ncde
  545.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  546. } {3.4 3.4 3.8 3.8 4.0 4.11}
  547. test btree-11.5 {marks and inserts} {
  548.     msetup
  549.     .t insert 1.4 ab\n\ncde
  550.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  551. } {1.2 1.2 3.5 3.5 4.0 4.11}
  552. test btree-11.6 {marks and inserts} {
  553.     msetup
  554.     .t insert 1.7 ab\n\ncde
  555.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  556. } {1.2 1.2 1.6 1.6 4.0 4.11}
  557.  
  558. test btree-12.1 {marks and deletes} {
  559.     msetup
  560.     .t delete 1.3 1.5
  561.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  562. } {1.2 1.2 1.4 1.4 2.0 2.11}
  563. test btree-12.2 {marks and deletes} {
  564.     msetup
  565.     .t delete 1.3 1.8
  566.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  567. } {1.2 1.2 1.3 1.3 2.0 2.11}
  568. test btree-12.3 {marks and deletes} {
  569.     msetup
  570.     .t delete 1.2 1.8
  571.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  572. } {1.2 1.2 1.2 1.2 2.0 2.11}
  573. test btree-12.4 {marks and deletes} {
  574.     msetup
  575.     .t delete 1.1 1.8
  576.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  577. } {1.1 1.1 1.1 1.1 2.0 2.11}
  578. test btree-12.5 {marks and deletes} {
  579.     msetup
  580.     .t delete 1.5 3.1
  581.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  582. } {1.2 1.2 1.5 1.5 1.5 1.5}
  583. test btree-12.6 {marks and deletes} {
  584.     msetup
  585.     .t mark set m2 4.5
  586.     .t delete 1.5 4.1
  587.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  588. } {1.2 1.2 1.5 1.5 1.9 1.5}
  589. test btree-12.7 {marks and deletes} {
  590.     msetup
  591.     .t mark set m2 4.5
  592.     .t mark set m3 4.5
  593.     .t mark set m1 4.7
  594.     .t delete 1.5 4.1
  595.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  596. } {1.2 1.11 1.5 1.5 1.9 1.9}
  597.  
  598. destroy .t
  599. text .t
  600. test btree-13.1 {tag searching} {
  601.     .t delete 1.0 100000.0
  602.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  603.     .t tag next x 2.2 2.1
  604. } {}
  605. test btree-13.2 {tag searching} {
  606.     .t delete 1.0 100000.0
  607.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  608.     .t tag add x 2.2 2.4
  609.     .t tag next x 2.2 2.3
  610. } {2.2 2.4}
  611. test btree-13.3 {tag searching} {
  612.     .t delete 1.0 100000.0
  613.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  614.     .t tag add x 2.2 2.4
  615.     .t tag next x 2.3 2.6
  616. } {}
  617. test btree-13.4 {tag searching} {
  618.     .t delete 1.0 100000.0
  619.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  620.     .t tag add x 2.5 2.8
  621.     .t tag next x 2.1 2.6
  622. } {2.5 2.8}
  623. test btree-13.5 {tag searching} {
  624.     .t delete 1.0 100000.0
  625.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  626.     .t tag add x 2.5 2.8
  627.     .t tag next x 2.1 2.5
  628. } {}
  629. test btree-13.6 {tag searching} {
  630.     .t delete 1.0 100000.0
  631.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  632.     .t tag add x 2.5 2.8
  633.     .t tag next x 2.1 2.4
  634. } {}
  635. test btree-13.7 {tag searching} {
  636.     .t delete 1.0 100000.0
  637.     .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
  638.     .t tag add x 2.5 2.8
  639.     .t tag next x 2.1 2.4
  640. } {}
  641. test btree-13.8 {tag searching} {
  642.     setup
  643.     .t insert 1.2 $bigText2
  644.     .t tag add x 190.3 191.2
  645.     .t tag next x 3.5
  646. } {190.3 191.2}
  647.  
  648. test btree-14.1 {check tag presence} {
  649.     setup
  650.     .t insert 1.2 $bigText2
  651.     .t tag add x 3.5 3.7
  652.     .t tag add y 133.9 141.5
  653.     .t tag add z 1.5 180.2
  654.     .t tag add q 141.4 142.3
  655.     .t tag add x 130.2 145.1
  656.     .t tag add a 141.0
  657.     .t tag add b 4.3
  658.     .t tag add b 7.5
  659.     .t tag add b 140.3
  660.     for {set i 120} {$i < 160} {incr i} {
  661.     .t tag add c $i.4
  662.     }
  663.     foreach i {a1 a2 a3 a4 a5 a6 a7 a8 a9 10 a11 a12 a13} {
  664.     .t tag add $i 122.2
  665.     }
  666.     .t tag add x 141.3
  667.     .t tag names 141.1
  668. } {x y z}
  669.  
  670. test btree-15.1 {rebalance with empty node} {
  671.     catch {destroy .t}
  672.     text .t
  673.     .t insert end "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23"
  674.     .t delete 6.0 12.0
  675.     .t get 1.0 end
  676. } "1\n2\n3\n4\n5\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n"
  677.  
  678. destroy .t
  679.