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

通讯编程

开发平台:

Visual C++

  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. # Copyright (c) 1998-1999 by Scriptics Corporation.
  9. # All rights reserved.
  10. #
  11. # RCS: @(#) $Id: textBTree.test,v 1.5 2002/07/13 20:28:35 dgp Exp $
  12. package require tcltest 2.1
  13. namespace import -force tcltest::configure
  14. namespace import -force tcltest::testsDirectory
  15. configure -testdir [file join [pwd] [file dirname [info script]]]
  16. configure -loadfile [file join [testsDirectory] constraints.tcl]
  17. tcltest::loadTestedCommands
  18. catch {destroy .t}
  19. text .t
  20. .t debug on
  21. test btree-1.1 {basic insertions} {
  22.     .t delete 1.0 100000.0
  23.     .t insert 1.0 "Line 1nLine 2nLine 3"
  24.     .t get 1.0 1000000.0
  25. } "Line 1nLine 2nLine 3n"
  26. test btree-1.2 {basic insertions} {
  27.     .t delete 1.0 100000.0
  28.     .t insert 1.0 "Line 1nLine 2nLine 3"
  29.     .t insert 1.3 XXX
  30.     .t get 1.0 1000000.0
  31. } "LinXXXe 1nLine 2nLine 3n"
  32. test btree-1.3 {basic insertions} {
  33.     .t delete 1.0 100000.0
  34.     .t insert 1.0 "Line 1nLine 2nLine 3"
  35.     .t insert 3.0 YYY
  36.     .t get 1.0 1000000.0
  37. } "Line 1nLine 2nYYYLine 3n"
  38. test btree-1.4 {basic insertions} {
  39.     .t delete 1.0 100000.0
  40.     .t insert 1.0 "Line 1nLine 2nLine 3"
  41.     .t insert 2.1 XnYY
  42.     .t get 1.0 1000000.0
  43. } "Line 1nLXnYYine 2nLine 3n"
  44. test btree-1.5 {basic insertions} {
  45.     .t delete 1.0 100000.0
  46.     .t insert 1.0 "Line 1nLine 2nLine 3"
  47.     .t insert 2.0 Xnnn
  48.     .t get 1.0 1000000.0
  49. } "Line 1nXnnnLine 2nLine 3n"
  50. test btree-1.6 {basic insertions} {
  51.     .t delete 1.0 100000.0
  52.     .t insert 1.0 "Line 1nLine 2nLine 3"
  53.     .t insert 2.6 Xn
  54.     .t get 1.0 1000000.0
  55. } "Line 1nLine 2XnnLine 3n"
  56. test btree-1.7 {insertion before start of text} {
  57.     .t delete 1.0 100000.0
  58.     .t insert 1.0 "Line 1nLine 2nLine 3"
  59.     .t insert 0.4 XXX
  60.     .t get 1.0 1000000.0
  61. } "XXXLine 1nLine 2nLine 3n"
  62. test btree-1.8 {insertion past end of text} {
  63.     .t delete 1.0 100000.0
  64.     .t insert 1.0 "Line 1nLine 2nLine 3"
  65.     .t insert 100.0 ZZ
  66.     .t get 1.0 1000000.0
  67. } "Line 1nLine 2nLine 3ZZn"
  68. test btree-1.9 {insertion before start of line} {
  69.     .t delete 1.0 100000.0
  70.     .t insert 1.0 "Line 1nLine 2nLine 3"
  71.     .t insert 2.-3 Q
  72.     .t get 1.0 1000000.0
  73. } "Line 1nQLine 2nLine 3n"
  74. test btree-1.10 {insertion past end of line} {
  75.     .t delete 1.0 100000.0
  76.     .t insert 1.0 "Line 1nLine 2nLine 3"
  77.     .t insert 2.40 XYZZY
  78.     .t get 1.0 1000000.0
  79. } "Line 1nLine 2XYZZYnLine 3n"
  80. test btree-1.11 {insertion past end of last line} {
  81.     .t delete 1.0 100000.0
  82.     .t insert 1.0 "Line 1nLine 2nLine 3"
  83.     .t insert 3.40 ABC
  84.     .t get 1.0 1000000.0
  85. } "Line 1nLine 2nLine 3ABCn"
  86. test btree-2.1 {basic deletions} {
  87.     .t delete 1.0 100000.0
  88.     .t insert 1.0 "Line 1nLine 2nLine 3"
  89.     .t delete 1.0 1.3
  90.     .t get 1.0 1000000.0
  91. } "e 1nLine 2nLine 3n"
  92. test btree-2.2 {basic deletions} {
  93.     .t delete 1.0 100000.0
  94.     .t insert 1.0 "Line 1nLine 2nLine 3"
  95.     .t delete 2.2
  96.     .t get 1.0 1000000.0
  97. } "Line 1nLie 2nLine 3n"
  98. test btree-2.3 {basic deletions} {
  99.     .t delete 1.0 100000.0
  100.     .t insert 1.0 "Line 1nLine 2nLine 3"
  101.     .t delete 2.0 2.3
  102.     .t get 1.0 1000000.0
  103. } "Line 1ne 2nLine 3n"
  104. test btree-2.4 {deleting whole lines} {
  105.     .t delete 1.0 100000.0
  106.     .t insert 1.0 "Line 1nLine 2nLine 3"
  107.     .t delete 1.2 3.0
  108.     .t get 1.0 1000000.0
  109. } "LiLine 3n"
  110. test btree-2.5 {deleting whole lines} {
  111.     .t delete 1.0 100000.0
  112.     .t insert 1.0 "Line 1nLine 2nnnLine 5"
  113.     .t delete 1.0 5.2
  114.     .t get 1.0 1000000.0
  115. } "ne 5n"
  116. test btree-2.6 {deleting before start of file} {
  117.     .t delete 1.0 100000.0
  118.     .t insert 1.0 "Line 1nLine 2nLine 3"
  119.     .t delete 0.3 1.2
  120.     .t get 1.0 1000000.0
  121. } "ne 1nLine 2nLine 3n"
  122. test btree-2.7 {deleting after end of file} {
  123.     .t delete 1.0 100000.0
  124.     .t insert 1.0 "Line 1nLine 2nLine 3"
  125.     .t delete 10.3
  126.     .t get 1.0 1000000.0
  127. } "Line 1nLine 2nLine 3n"
  128. test btree-2.8 {deleting before start of line} {
  129.     .t delete 1.0 100000.0
  130.     .t insert 1.0 "Line 1nLine 2nLine 3"
  131.     .t delete 3.-1 3.3
  132.     .t get 1.0 1000000.0
  133. } "Line 1nLine 2ne 3n"
  134. test btree-2.9 {deleting before start of line} {
  135.     .t delete 1.0 100000.0
  136.     .t insert 1.0 "Line 1nLine 2nLine 3"
  137.     .t delete 1.-1 1.0
  138.     .t get 1.0 1000000.0
  139. } "Line 1nLine 2nLine 3n"
  140. test btree-2.10 {deleting after end of line} {
  141.     .t delete 1.0 100000.0
  142.     .t insert 1.0 "Line 1nLine 2nLine 3"
  143.     .t delete 1.8 2.1
  144.     .t get 1.0 1000000.0
  145. } "Line 1ine 2nLine 3n"
  146. test btree-2.11 {deleting after end of last line} {
  147.     .t delete 1.0 100000.0
  148.     .t insert 1.0 "Line 1nLine 2nLine 3"
  149.     .t delete 3.8 4.1
  150.     .t get 1.0 1000000.0
  151. } "Line 1nLine 2nLine 3n"
  152. test btree-2.12 {deleting before start of file} {
  153.     .t delete 1.0 100000.0
  154.     .t insert 1.0 "Line 1nLine 2nLine 3"
  155.     .t delete 1.8 0.0
  156.     .t get 1.0 1000000.0
  157. } "Line 1nLine 2nLine 3n"
  158. test btree-2.13 {deleting past end of file} {
  159.     .t delete 1.0 100000.0
  160.     .t insert 1.0 "Line 1nLine 2nLine 3"
  161.     .t delete 1.8 4.0
  162.     .t get 1.0 1000000.0
  163. } "Line 1n"
  164. test btree-2.14 {deleting with end before start of line} {
  165.     .t delete 1.0 100000.0
  166.     .t insert 1.0 "Line 1nLine 2nLine 3"
  167.     .t delete 1.3 2.-3
  168.     .t get 1.0 1000000.0
  169. } "LinLine 2nLine 3n"
  170. test btree-2.15 {deleting past end of line} {
  171.     .t delete 1.0 100000.0
  172.     .t insert 1.0 "Line 1nLine 2nLine 3"
  173.     .t delete 1.3 1.9
  174.     .t get 1.0 1000000.0
  175. } "LinnLine 2nLine 3n"
  176. test btree-2.16 {deleting past end of line} {
  177.     .t delete 1.0 100000.0
  178.     .t insert 1.0 "Line 1nLine 2nLine 3"
  179.     .t delete 3.2 3.15
  180.     .t get 1.0 1000000.0
  181. } "Line 1nLine 2nLin"
  182. test btree-2.17 {deleting past end of line} {
  183.     .t delete 1.0 100000.0
  184.     .t insert 1.0 "Line 1nLine 2nLine 3"
  185.     .t delete 3.0 3.15
  186.     .t get 1.0 1000000.0
  187. } "Line 1nLine 2nn"
  188. test btree-2.18 {deleting past end of line} {
  189.     .t delete 1.0 100000.0
  190.     .t insert 1.0 "Line 1nLine 2nLine 3"
  191.     .t delete 1.0 3.15
  192.     .t get 1.0 1000000.0
  193. } "n"
  194. test btree-2.19 {deleting with negative range} {
  195.     .t delete 1.0 100000.0
  196.     .t insert 1.0 "Line 1nLine 2nLine 3"
  197.     .t delete 3.2 2.4
  198.     .t get 1.0 1000000.0
  199. } "Line 1nLine 2nLine 3n"
  200. test btree-2.20 {deleting with negative range} {
  201.     .t delete 1.0 100000.0
  202.     .t insert 1.0 "Line 1nLine 2nLine 3"
  203.     .t delete 3.2 3.1
  204.     .t get 1.0 1000000.0
  205. } "Line 1nLine 2nLine 3n"
  206. test btree-2.21 {deleting with negative range} {
  207.     .t delete 1.0 100000.0
  208.     .t insert 1.0 "Line 1nLine 2nLine 3"
  209.     .t delete 3.2 3.2
  210.     .t get 1.0 1000000.0
  211. } "Line 1nLine 2nLine 3n"
  212. proc setup {} {
  213.     .t delete 1.0 100000.0
  214.     .t tag delete x y
  215.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  216.     .t tag add x 1.1
  217.     .t tag add x 1.5 1.13
  218.     .t tag add x 2.2 2.6
  219.     .t tag add y 1.5
  220. }
  221. test btree-3.1 {inserting with tags} {
  222.     setup
  223.     .t insert 1.0 XXX
  224.     list [.t tag ranges x] [.t tag ranges y]
  225. } {{1.4 1.5 1.8 1.16 2.2 2.6} {1.8 1.9}}
  226. test btree-3.2 {inserting with tags} {
  227.     setup
  228.     .t insert 1.15 YYY
  229.     list [.t tag ranges x] [.t tag ranges y]
  230. } {{1.1 1.2 1.5 1.13 2.2 2.6} {1.5 1.6}}
  231. test btree-3.3 {inserting with tags} {
  232.     setup
  233.     .t insert 1.7 ZZZZ
  234.     list [.t tag ranges x] [.t tag ranges y]
  235. } {{1.1 1.2 1.5 1.17 2.2 2.6} {1.5 1.6}}
  236. test btree-3.4 {inserting with tags} {
  237.     setup
  238.     .t insert 1.7 nn
  239.     list [.t tag ranges x] [.t tag ranges y]
  240. } {{1.1 1.2 1.5 3.6 4.2 4.6} {1.5 1.6}}
  241. test btree-3.5 {inserting with tags} {
  242.     setup
  243.     .t insert 1.5 An
  244.     list [.t tag ranges x] [.t tag ranges y]
  245. } {{1.1 1.2 2.0 2.8 3.2 3.6} {2.0 2.1}}
  246. test btree-3.6 {inserting with tags} {
  247.     setup
  248.     .t insert 1.13 An
  249.     list [.t tag ranges x] [.t tag ranges y]
  250. } {{1.1 1.2 1.5 1.13 3.2 3.6} {1.5 1.6}}
  251. test btree-4.1 {deleting with tags} {
  252.     setup
  253.     .t delete 1.6 1.9
  254.     list [.t tag ranges x] [.t tag ranges y]
  255. } {{1.1 1.2 1.5 1.10 2.2 2.6} {1.5 1.6}}
  256. test btree-4.2 {deleting with tags} {
  257.     setup
  258.     .t delete 1.1 2.3
  259.     list [.t tag ranges x] [.t tag ranges y]
  260. } {{1.1 1.4} {}}
  261. test btree-4.3 {deleting with tags} {
  262.     setup
  263.     .t delete 1.4 2.1
  264.     list [.t tag ranges x] [.t tag ranges y]
  265. } {{1.1 1.2 1.5 1.9} {}}
  266. test btree-4.4 {deleting with tags} {
  267.     setup
  268.     .t delete 1.14 2.1
  269.     list [.t tag ranges x] [.t tag ranges y]
  270. } {{1.1 1.2 1.5 1.13 1.15 1.19} {1.5 1.6}}
  271. test btree-4.5 {deleting with tags} {
  272.     setup
  273.     .t delete 1.0 2.10
  274.     list [.t tag ranges x] [.t tag ranges y]
  275. } {{} {}}
  276. test btree-4.6 {deleting with tags} {
  277.     setup
  278.     .t delete 1.0 1.5
  279.     list [.t tag ranges x] [.t tag ranges y]
  280. } {{1.0 1.8 2.2 2.6} {1.0 1.1}}
  281. test btree-4.7 {deleting with tags} {
  282.     setup
  283.     .t delete 1.6 1.9
  284.     list [.t tag ranges x] [.t tag ranges y]
  285. } {{1.1 1.2 1.5 1.10 2.2 2.6} {1.5 1.6}}
  286. test btree-4.8 {deleting with tags} {
  287.     setup
  288.     .t delete 1.5 1.13
  289.     list [.t tag ranges x] [.t tag ranges y]
  290. } {{1.1 1.2 2.2 2.6} {}}
  291. set bigText1 {}
  292. for {set i 0} {$i < 10} {incr i} {
  293.     append bigText1 "Line $in"
  294. }
  295. set bigText2 {}
  296. for {set i 0} {$i < 200} {incr i} {
  297.     append bigText2 "Line $in"
  298. }
  299. test btree-5.1 {very large inserts, with tags} {
  300.     setup
  301.     .t insert 1.0 $bigText1
  302.     list [.t tag ranges x] [.t tag ranges y]
  303. } {{11.1 11.2 11.5 11.13 12.2 12.6} {11.5 11.6}}
  304. test btree-5.2 {very large inserts, with tags} {
  305.     setup
  306.     .t insert 1.2 $bigText2
  307.     list [.t tag ranges x] [.t tag ranges y]
  308. } {{1.1 1.2 201.3 201.11 202.2 202.6} {201.3 201.4}}
  309. test btree-5.3 {very large inserts, with tags} {
  310.     setup
  311.     for {set i 0} {$i < 200} {incr i} {
  312. .t insert 1.8 "longer line $in"
  313.     }
  314.     list [.t tag ranges x] [.t tag ranges y] [.t get 1.0 1.100] [.t get 198.0 198.100]
  315. } {{1.1 1.2 1.5 201.5 202.2 202.6} {1.5 1.6} {Text forlonger line 199} {longer line 2}}
  316. test btree-6.1 {very large deletes, with tags} {
  317.     setup
  318.     .t insert 1.1 $bigText2
  319.     .t delete 1.2 201.2
  320.     list [.t tag ranges x] [.t tag ranges y]
  321. } {{1.4 1.12 2.2 2.6} {1.4 1.5}}
  322. test btree-6.2 {very large deletes, with tags} {
  323.     setup
  324.     .t insert 1.1 $bigText2
  325.     for {set i 0} {$i < 200} {incr i} {
  326. .t delete 1.2 2.2
  327.     }
  328.     list [.t tag ranges x] [.t tag ranges y]
  329. } {{1.4 1.12 2.2 2.6} {1.4 1.5}}
  330. test btree-6.3 {very large deletes, with tags} {
  331.     setup
  332.     .t insert 1.1 $bigText2
  333.     .t delete 2.3 10000.0
  334.     .t get 1.0 1000.0
  335. } {TLine 0
  336. Lin
  337. }
  338. test btree-6.4 {very large deletes, with tags} {
  339.     setup
  340.     .t insert 1.1 $bigText2
  341.     for {set i 0} {$i < 100} {incr i} {
  342. .t delete 30.0 31.0
  343.     }
  344.     list [.t tag ranges x] [.t tag ranges y]
  345. } {{101.0 101.1 101.4 101.12 102.2 102.6} {101.4 101.5}}
  346. test btree-6.5 {very large deletes, with tags} {
  347.     setup
  348.     .t insert 1.1 $bigText2
  349.     for {set i 0} {$i < 100} {incr i} {
  350. set j [expr $i+2]
  351. set k [expr 1+2*$i]
  352. .t tag add x $j.1 $j.3
  353. .t tag add y $k.1 $k.6
  354.     }
  355.     .t delete 2.0 200.0
  356.     list [.t tag ranges x] [.t tag ranges y]
  357. } {{3.0 3.1 3.4 3.12 4.2 4.6} {1.1 1.6 3.4 3.5}}
  358. test btree-6.6 {very large deletes, with tags} {
  359.     setup
  360.     .t insert 1.1 $bigText2
  361.     for {set i 0} {$i < 100} {incr i} {
  362. set j [expr $i+2]
  363. set k [expr 1+2*$i]
  364. .t tag add x $j.1 $j.3
  365. .t tag add y $k.1 $k.6
  366.     }
  367.     for {set i 199} {$i >= 2} {incr i -1} {
  368. .t delete $i.0 [expr $i+1].0
  369.     }
  370.     list [.t tag ranges x] [.t tag ranges y]
  371. } {{3.0 3.1 3.4 3.12 4.2 4.6} {1.1 1.6 3.4 3.5}}
  372. .t delete 1.0 end
  373. .t insert 1.0 "Text for first linenSecond linennLast line of info"
  374. set i 1
  375. foreach check {
  376.     {1.3 1.6 1.7 2.0 {1.3 1.6 1.7 2.0}}
  377.     {1.3 1.6 1.6 2.0 {1.3 2.0}}
  378.     {1.3 1.6 1.4 2.0 {1.3 2.0}}
  379.     {2.0 4.3 1.4 1.10 {1.4 1.10 2.0 4.3}}
  380.     {2.0 4.3 1.4 1.end {1.4 1.19 2.0 4.3}}
  381.     {2.0 4.3 1.4 2.0 {1.4 4.3}}
  382.     {2.0 4.3 1.4 3.0 {1.4 4.3}}
  383.     {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}}
  384.     {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}}
  385.     {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}}
  386.     {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}}
  387. } {
  388.     test btree-7.$i {tag addition and removal} {
  389. .t tag remove x 1.0 end
  390. while {[llength $check] > 2} {
  391.     .t tag add x [lindex $check 0] [lindex $check 1]
  392.     set check [lrange $check 2 end]
  393. }
  394. .t tag ranges x
  395.     } [lindex $check [expr [llength $check]-1]]
  396.     incr i
  397. }
  398. test btree-8.1 {tag addition and removal, weird ranges} {
  399.     .t delete 1.0 100000.0
  400.     .t tag delete x
  401.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  402.     .t tag add x 0.0 1.3
  403.     .t tag ranges x
  404. } {1.0 1.3}
  405. test btree-8.2 {tag addition and removal, weird ranges} {
  406.     .t delete 1.0 100000.0
  407.     .t tag delete x
  408.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  409.     .t tag add x 1.40 2.4
  410.     .t tag ranges x
  411. } {1.19 2.4}
  412. test btree-8.3 {tag addition and removal, weird ranges} {
  413.     .t delete 1.0 100000.0
  414.     .t tag delete x
  415.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  416.     .t tag add x 4.40 4.41
  417.     .t tag ranges x
  418. } {}
  419. test btree-8.4 {tag addition and removal, weird ranges} {
  420.     .t delete 1.0 100000.0
  421.     .t tag delete x
  422.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  423.     .t tag add x 5.1 5.2
  424.     .t tag ranges x
  425. } {}
  426. test btree-8.5 {tag addition and removal, weird ranges} {
  427.     .t delete 1.0 100000.0
  428.     .t tag delete x
  429.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  430.     .t tag add x 1.1 9.0
  431.     .t tag ranges x
  432. } {1.1 5.0}
  433. test btree-8.6 {tag addition and removal, weird ranges} {
  434.     .t delete 1.0 100000.0
  435.     .t tag delete x
  436.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  437.     .t tag add x 1.1 1.90
  438.     .t tag ranges x
  439. } {1.1 1.19}
  440. test btree-8.7 {tag addition and removal, weird ranges} {
  441.     .t delete 1.0 100000.0
  442.     .t tag delete x
  443.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  444.     .t tag add x 1.1 4.90
  445.     .t tag ranges x
  446. } {1.1 4.17}
  447. test btree-8.8 {tag addition and removal, weird ranges} {
  448.     .t delete 1.0 100000.0
  449.     .t tag delete x
  450.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  451.     .t tag add x 3.0 3.0
  452.     .t tag ranges x
  453. } {}
  454. test btree-9.1 {tag names} {
  455.     setup
  456.     .t tag names
  457. } {sel x y}
  458. test btree-9.2 {tag names} {
  459.     setup
  460.     .t tag add tag1 1.8
  461.     .t tag add tag2 1.8
  462.     .t tag add tag3 1.7 1.9
  463.     .t tag names 1.8
  464. } {x tag1 tag2 tag3}
  465. test btree-9.3 {lots of tag names} {
  466.     setup
  467.     .t insert 1.2 $bigText2
  468.     foreach i {tag1 foo ThisOne {x space} q r s t} {
  469. .t tag add $i 150.2
  470.     }
  471.     foreach i {u tagA tagB tagC and more {$} {} {
  472. .t tag add $i 150.1 150.3
  473.     }
  474.     .t tag names 150.2
  475. } {tag1 foo ThisOne {x space} q r s t u tagA tagB tagC and more {$} {}
  476. test btree-9.4 {lots of tag names} {
  477.     setup
  478.     .t insert 1.2 $bigText2
  479.     .t tag delete tag1 foo ThisOne more {x space} q r s t u
  480.     .t tag delete tagA tagB tagC and {$} { more
  481.     foreach i {tag1 foo ThisOne more {x space} q r s t} {
  482. .t tag add $i 150.2
  483.     }
  484.     foreach i {foo ThisOne u tagA tagB tagC and more {$} {} {
  485. .t tag add $i 150.4
  486.     }
  487.     .t tag delete tag1 more q r tagA
  488.     .t tag names 150.2
  489. } {foo ThisOne {x space} s t}
  490. proc msetup {} {
  491.     .t delete 1.0 100000.0
  492.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  493.     .t mark set m1 1.2
  494.     .t mark set l1 1.2
  495.     .t mark gravity l1 left
  496.     .t mark set next 1.6
  497.     .t mark set x 1.6
  498.     .t mark set m2 2.0
  499.     .t mark set m3 2.100
  500.     .t tag add x 1.3 1.8
  501. }
  502. test btree-10.1 {basic mark facilities} {
  503.     msetup
  504.     list [lsort [.t mark names]] [.t index m1] [.t index m2] [.t index m3]
  505. } {{current insert l1 m1 m2 m3 next x} 1.2 2.0 2.11}
  506. test btree-10.2 {basic mark facilities} {
  507.     msetup
  508.     .t mark unset m2
  509.     lsort [.t mark names]
  510. } {current insert l1 m1 m3 next x}
  511. test btree-10.3 {basic mark facilities} {
  512.     msetup
  513.     .t mark set m2 1.8
  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 1.8 2.11}
  516. test btree-11.1 {marks and inserts} {
  517.     msetup
  518.     .t insert 1.1 abcde
  519.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  520. } {1.7 1.7 1.11 1.11 2.0 2.11}
  521. test btree-11.2 {marks and inserts} {
  522.     msetup
  523.     .t insert 1.2 abcde
  524.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  525. } {1.2 1.7 1.11 1.11 2.0 2.11}
  526. test btree-11.3 {marks and inserts} {
  527.     msetup
  528.     .t insert 1.3 abcde
  529.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  530. } {1.2 1.2 1.11 1.11 2.0 2.11}
  531. test btree-11.4 {marks and inserts} {
  532.     msetup
  533.     .t insert 1.1 abnncde
  534.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  535. } {3.4 3.4 3.8 3.8 4.0 4.11}
  536. test btree-11.5 {marks and inserts} {
  537.     msetup
  538.     .t insert 1.4 abnncde
  539.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  540. } {1.2 1.2 3.5 3.5 4.0 4.11}
  541. test btree-11.6 {marks and inserts} {
  542.     msetup
  543.     .t insert 1.7 abnncde
  544.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  545. } {1.2 1.2 1.6 1.6 4.0 4.11}
  546. test btree-12.1 {marks and deletes} {
  547.     msetup
  548.     .t delete 1.3 1.5
  549.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  550. } {1.2 1.2 1.4 1.4 2.0 2.11}
  551. test btree-12.2 {marks and deletes} {
  552.     msetup
  553.     .t delete 1.3 1.8
  554.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  555. } {1.2 1.2 1.3 1.3 2.0 2.11}
  556. test btree-12.3 {marks and deletes} {
  557.     msetup
  558.     .t delete 1.2 1.8
  559.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  560. } {1.2 1.2 1.2 1.2 2.0 2.11}
  561. test btree-12.4 {marks and deletes} {
  562.     msetup
  563.     .t delete 1.1 1.8
  564.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  565. } {1.1 1.1 1.1 1.1 2.0 2.11}
  566. test btree-12.5 {marks and deletes} {
  567.     msetup
  568.     .t delete 1.5 3.1
  569.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  570. } {1.2 1.2 1.5 1.5 1.5 1.5}
  571. test btree-12.6 {marks and deletes} {
  572.     msetup
  573.     .t mark set m2 4.5
  574.     .t delete 1.5 4.1
  575.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  576. } {1.2 1.2 1.5 1.5 1.9 1.5}
  577. test btree-12.7 {marks and deletes} {
  578.     msetup
  579.     .t mark set m2 4.5
  580.     .t mark set m3 4.5
  581.     .t mark set m1 4.7
  582.     .t delete 1.5 4.1
  583.     list [.t index l1] [.t index m1] [.t index next] [.t index x] [.t index m2] [.t index m3]
  584. } {1.2 1.11 1.5 1.5 1.9 1.9}
  585. destroy .t
  586. text .t
  587. test btree-13.1 {tag searching} {
  588.     .t delete 1.0 100000.0
  589.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  590.     .t tag next x 2.2 2.1
  591. } {}
  592. test btree-13.2 {tag searching} {
  593.     .t delete 1.0 100000.0
  594.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  595.     .t tag add x 2.2 2.4
  596.     .t tag next x 2.2 2.3
  597. } {2.2 2.4}
  598. test btree-13.3 {tag searching} {
  599.     .t delete 1.0 100000.0
  600.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  601.     .t tag add x 2.2 2.4
  602.     .t tag next x 2.3 2.6
  603. } {}
  604. test btree-13.4 {tag searching} {
  605.     .t delete 1.0 100000.0
  606.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  607.     .t tag add x 2.5 2.8
  608.     .t tag next x 2.1 2.6
  609. } {2.5 2.8}
  610. test btree-13.5 {tag searching} {
  611.     .t delete 1.0 100000.0
  612.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  613.     .t tag add x 2.5 2.8
  614.     .t tag next x 2.1 2.5
  615. } {}
  616. test btree-13.6 {tag searching} {
  617.     .t delete 1.0 100000.0
  618.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  619.     .t tag add x 2.1 2.4
  620.     .t tag next x 2.5 2.8
  621. } {}
  622. test btree-13.7 {tag searching} {
  623.     .t delete 1.0 100000.0
  624.     .t insert 1.0 "Text for first linenSecond linennLast line of info"
  625.     .t tag add x 2.5 2.8
  626.     .t tag next x 2.1 2.4
  627. } {}
  628. test btree-13.8 {tag searching} {
  629.     setup
  630.     .t insert 1.2 $bigText2
  631.     .t tag add x 190.3 191.2
  632.     .t tag next x 3.5
  633. } {190.3 191.2}
  634. test btree-14.1 {check tag presence} {
  635.     setup
  636.     .t insert 1.2 $bigText2
  637.     .t tag add x 3.5 3.7
  638.     .t tag add y 133.9 141.5
  639.     .t tag add z 1.5 180.2
  640.     .t tag add q 141.4 142.3
  641.     .t tag add x 130.2 145.1
  642.     .t tag add a 141.0
  643.     .t tag add b 4.3
  644.     .t tag add b 7.5
  645.     .t tag add b 140.3
  646.     for {set i 120} {$i < 160} {incr i} {
  647. .t tag add c $i.4
  648.     }
  649.     foreach i {a1 a2 a3 a4 a5 a6 a7 a8 a9 10 a11 a12 a13} {
  650. .t tag add $i 122.2
  651.     }
  652.     .t tag add x 141.3
  653.     .t tag names 141.1
  654. } {x y z}
  655. test btree-15.1 {rebalance with empty node} {
  656.     catch {destroy .t}
  657.     text .t
  658.     .t debug 1
  659.     .t insert end "1n2n3n4n5n6n7n8n9n10n11n12n13n14n15n16n17n18n19n20n21n22n23"
  660.     .t delete 6.0 12.0
  661.     .t get 1.0 end
  662. } "1n2n3n4n5n12n13n14n15n16n17n18n19n20n21n22n23n"
  663. proc setupBig {} {
  664.     .t delete 1.0 end
  665.     .t tag delete x y
  666.     .t tag configure x -foreground blue
  667.     .t tag configure y -underline true
  668.     # Create a Btree with 2002 lines (2000 + already existing + phantom at end)
  669.     # This generates a level 3 node with 9 children
  670.     # Most level 2 nodes cover 216 lines and have 6 children, except the last
  671.     # level 2 node covers 274 lines and has 7 children.
  672.     # Most level 1 nodes cover 36 lines and have 6 children, except the
  673.     # rightmost node has 58 lines and 9 children.
  674.     # Level 2: 2002 = 8*216 + 274
  675.     # Level 1: 2002 = 54*36 + 58
  676.     # Level 0: 2002 = 332*6 + 10
  677.     for {set i 0} {$i < 2000} {incr i} {
  678. append x "Line $i abcd efgh ijkln"
  679.     }
  680.     .t insert insert $x
  681.     .t debug 1
  682. }
  683. test btree-16.1 {add tag does not push root above level 0} {
  684.     catch {destroy .t}
  685.     text .t
  686.     setupBig
  687.     .t tag add x 1.1 1.10
  688.     .t tag add x 5.1 5.10
  689.     .t tag ranges x
  690. } {1.1 1.10 5.1 5.10}
  691. test btree-16.2 {add tag pushes root up to level 1 node} {
  692.     catch {destroy .t}
  693.     text .t
  694.     .t debug 1
  695.     setupBig
  696.     .t tag add x 1.1 1.10
  697.     .t tag add x 8.1 8.10
  698.     .t tag ranges x
  699. } {1.1 1.10 8.1 8.10}
  700. test btree-16.3 {add tag pushes root up to level 2 node} {
  701.     .t tag remove x 1.0 end
  702.     .t tag add x 8.1 9.10
  703.     .t tag add x 180.1 180.end
  704.     .t tag ranges x
  705. } {8.1 9.10 180.1 180.23}
  706. test btree-16.4 {add tag pushes root up to level 3 node} {
  707.     .t tag remove x 1.0 end
  708.     .t tag add y 1.1 2000.0
  709.     .t tag add x 1.1 8.10
  710.     .t tag add x 180.end 217.0
  711.     list [.t tag ranges x] [.t tag ranges y]
  712. } {{1.1 8.10 180.23 217.0} {1.1 2000.0}}
  713. test btree-16.5 {add tag doesn't push root up} {
  714.     .t tag remove x 1.0 end
  715.     .t tag add x 1.1 8.10
  716.     .t tag add x 2000.0 2000.3
  717.     .t tag add x 180.end 217.0
  718.     .t tag ranges x
  719. } {1.1 8.10 180.23 217.0 2000.0 2000.3}
  720. test btree-16.6 {two node splits at once pushes root up} {
  721.     .t delete 1.0 end
  722.     for {set i 1} {$i < 10} {incr i} {
  723. .t insert end "Line $in"
  724.     }
  725.     .t tag add x 8.0 8.end
  726.     .t tag add y 9.0 end
  727.     set x {}
  728.     for {} {$i < 50} {incr i} {
  729. append x "Line $in"
  730.     }
  731.     .t insert end $x y
  732.     list [.t tag ranges x] [.t tag ranges y]
  733. } {{8.0 8.6} {9.0 51.0}}
  734. # The following find bugs in the SearchStart procedures
  735. test btree-16.7 {Partial tag remove from before first range} {
  736.     .t tag remove x 1.0 end
  737.     .t tag add x 2.0 2.6
  738.     .t tag remove x 1.0 2.0
  739.     .t tag ranges x
  740. } {2.0 2.6}
  741. test btree-16.8 {Partial tag remove from before first range} {
  742.     .t tag remove x 1.0 end
  743.     .t tag add x 2.0 2.6
  744.     .t tag remove x 1.0 2.1
  745.     .t tag ranges x
  746. } {2.1 2.6}
  747. test btree-16.9 {Partial tag remove from before first range} {
  748.     .t tag remove x 1.0 end
  749.     .t tag add x 2.0 2.6
  750.     .t tag remove x 1.0 2.3
  751.     .t tag ranges x
  752. } {2.3 2.6}
  753. test btree-16.10 {Partial tag remove from before first range} {
  754.     .t tag remove x 1.0 end
  755.     .t tag add x 1.0 2.6
  756.     .t tag remove x 1.0 2.5
  757.     .t tag ranges x
  758. } {2.5 2.6}
  759. test btree-16.11 {StartSearchBack boundary case} {
  760.     .t tag remove x 1.0 end
  761.     .t tag add x 1.3 1.4
  762.     .t tag prevr x 2.0 1.4
  763. } {}
  764. test btree-16.12 {StartSearchBack boundary case} {
  765.     .t tag remove x 1.0 end
  766.     .t tag add x 1.3 1.4
  767.     .t tag prevr x 2.0 1.3
  768. } {1.3 1.4}
  769. test btree-16.13 {StartSearchBack boundary case} {
  770.     .t tag remove x 1.0 end
  771.     .t tag add x 1.0 1.4
  772.     .t tag prevr x 1.3
  773. } {1.0 1.4}
  774. test btree-17.1 {remove tag does not push root down} {
  775.     catch {destroy .t}
  776.     text .t
  777.     .t debug 0
  778.     setupBig
  779.     .t tag add x 1.1 5.10
  780.     .t tag remove x 3.1 5.end
  781.     .t tag ranges x
  782. } {1.1 3.1}
  783. test btree-17.2 {remove tag pushes root from level 1 to level 0} {
  784.     .t tag remove x 1.0 end
  785.     .t tag add x 1.1 8.10
  786.     .t tag remove x 3.1 end
  787.     .t tag ranges x
  788. } {1.1 3.1}
  789. test btree-17.3 {remove tag pushes root from level 2 to level 1} {
  790.     .t tag remove x 1.0 end
  791.     .t tag add x 1.1 180.10
  792.     .t tag remove x 35.1 end
  793.     .t tag ranges x
  794. } {1.1 35.1}
  795. test btree-17.4 {remove tag doesn't change level 2} {
  796.     .t tag remove x 1.0 end
  797.     .t tag add x 1.1 180.10
  798.     .t tag remove x 35.1 180.0
  799.     .t tag ranges x
  800. } {1.1 35.1 180.0 180.10}
  801. test btree-17.5 {remove tag pushes root from level 3 to level 0} {
  802.     .t tag remove x 1.0 end
  803.     .t tag add x 1.1 1.10
  804.     .t tag add x 2000.1 2000.10
  805.     .t tag remove x 1.0 2000.0
  806.     .t tag ranges x
  807. } {2000.1 2000.10}
  808. test btree-17.6 {text deletion pushes root from level 3 to level 0} {
  809.     .t tag remove x 1.0 end
  810.     .t tag add x 1.1 1.10
  811.     .t tag add x 2000.1 2000.10
  812.     .t delete 1.0 "1000.0 lineend +1 char"
  813.     .t tag ranges x
  814. } {1000.1 1000.10}
  815. catch {destroy .t}
  816. text .t
  817. test btree-18.1 {tag search back, no tag} {
  818.     .t insert 1.0 "Line 1 abcd efgh ijkln"
  819.     .t tag prev x 1.1 1.1
  820. } {}
  821. test btree-18.2 {tag search back, start at existing range} {
  822.     .t tag remove x 1.0 end
  823.     .t tag add x 1.1 1.4
  824.     .t tag add x 1.8 1.11
  825.     .t tag add x 1.16
  826.     .t tag prev x 1.1
  827. } {}
  828. test btree-18.3 {tag search back, end at existing range} {
  829.     .t tag remove x 1.0 end
  830.     .t tag add x 1.1 1.4
  831.     .t tag add x 1.8 1.11
  832.     .t tag add x 1.16
  833.     .t tag prev x 1.3 1.1
  834. } {1.1 1.4}
  835. test btree-18.4 {tag search back, start within range} {
  836.     .t tag remove x 1.0 end
  837.     .t tag add x 1.1 1.4
  838.     .t tag add x 1.8 1.11
  839.     .t tag add x 1.16
  840.     .t tag prev x 1.10 1.0
  841. } {1.8 1.11}
  842. test btree-18.5 {tag search back, start at end of range} {
  843.     .t tag remove x 1.0 end
  844.     .t tag add x 1.1 1.4
  845.     .t tag add x 1.8 1.11
  846.     .t tag add x 1.16
  847.     list [.t tag prev x 1.4 1.0] [.t tag prev x 1.11 1.0]
  848. } {{1.1 1.4} {1.8 1.11}}
  849. test btree-18.6 {tag search back, start beyond range, same level 0 node} {
  850.     .t tag remove x 1.0 end
  851.     .t tag add x 1.1 1.4
  852.     .t tag add x 1.8 1.11
  853.     .t tag add x 1.16
  854.     .t tag prev x 3.0
  855. } {1.16 1.17}
  856. test btree-18.7 {tag search back, outside any range} {
  857.     .t tag remove x 1.0 end
  858.     .t tag add x 1.1 1.4
  859.     .t tag add x 1.16
  860.     .t tag prev x 1.8 1.5
  861. } {}
  862. test btree-18.8 {tag search back, start at start of node boundary} {
  863.     setupBig
  864.     .t tag remove x 1.0 end
  865.     .t tag add x 2.5 2.8
  866.     .t tag prev x 19.0
  867. } {2.5 2.8}
  868. test btree-18.9 {tag search back, large complex btree spans} {
  869.     .t tag remove x 1.0 end
  870.     .t tag add x 1.3 1.end
  871.     .t tag add x 200.0 220.0
  872.     .t tag add x 500.0 520.0
  873.     list [.t tag prev x end] [.t tag prev x 433.0]
  874. } {{500.0 520.0} {200.0 220.0}}
  875. destroy .t
  876. # cleanup
  877. ::tcltest::cleanupTests
  878. return