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.
6 # Copyright (c) 1992-1994 The Regents of the University of California.
7 # Copyright (c) 1994 Sun Microsystems, Inc.
9 # See the file "license.terms" for information on usage and redistribution
10 # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
14 if {[string compare test [info procs test]] == 1} then \
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
85 } "Line 1\nLine 2\nLine 3ABC\n"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
212 } "Line 1\nLine 2\nLine 3\n"
215 .t delete 1.0 100000.0
217 .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
219 .t tag add x 1.5 1.13
224 test btree-3.1 {inserting with tags} {
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} {
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} {
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} {
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} {
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} {
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}}
255 test btree-4.1 {deleting with tags} {
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} {
263 list [.t tag ranges x] [.t tag ranges y]
265 test btree-4.3 {deleting with tags} {
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} {
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} {
278 list [.t tag ranges x] [.t tag ranges y]
280 test btree-4.6 {deleting with tags} {
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} {
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} {
293 list [.t tag ranges x] [.t tag ranges y]
294 } {{1.1 1.2 2.2 2.6} {}}
297 for {set i 0} {$i < 10} {incr i} {
298 append bigText1 "Line $i\n"
301 for {set i 0} {$i < 200} {incr i} {
302 append bigText2 "Line $i\n"
304 test btree-5.1 {very large inserts, with tags} {
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} {
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} {
316 for {set i 0} {$i < 200} {incr i} {
317 .t insert 1.8 "longer line $i\n"
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}}
322 test btree-6.1 {very large deletes, with tags} {
324 .t insert 1.1 $bigText2
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} {
330 .t insert 1.1 $bigText2
331 for {set i 0} {$i < 200} {incr i} {
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} {
338 .t insert 1.1 $bigText2
339 .t delete 2.3 10000.0
344 test btree-6.4 {very large deletes, with tags} {
346 .t insert 1.1 $bigText2
347 for {set i 0} {$i < 100} {incr i} {
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} {
354 .t insert 1.1 $bigText2
355 for {set i 0} {$i < 100} {incr i} {
358 .t tag add x $j.1 $j.3
359 .t tag add y $k.1 $k.6
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} {
366 .t insert 1.1 $bigText2
367 for {set i 0} {$i < 100} {incr i} {
370 .t tag add x $j.1 $j.3
371 .t tag add y $k.1 $k.6
373 for {set i 199} {$i >= 2} {incr i -1} {
374 .t delete $i.0 [expr $i+1].0
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}}
380 .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
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}}
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]
402 } [lindex $check [expr [llength $check]-1]]
406 test btree-8.1 {tag addition and removal, weird ranges} {
407 .t delete 1.0 100000.0
409 .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
413 test btree-8.2 {tag addition and removal, weird ranges} {
414 .t delete 1.0 100000.0
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
420 test btree-8.3 {tag addition and removal, weird ranges} {
421 .t delete 1.0 100000.0
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
427 test btree-8.4 {tag addition and removal, weird ranges} {
428 .t delete 1.0 100000.0
430 .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
434 test btree-8.5 {tag addition and removal, weird ranges} {
435 .t delete 1.0 100000.0
437 .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
441 test btree-8.6 {tag addition and removal, weird ranges} {
442 .t delete 1.0 100000.0
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
448 test btree-8.7 {tag addition and removal, weird ranges} {
449 .t delete 1.0 100000.0
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
455 test btree-8.8 {tag addition and removal, weird ranges} {
456 .t delete 1.0 100000.0
458 .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
463 test btree-9.1 {tag names} {
467 test btree-9.2 {tag names} {
471 .t tag add tag3 1.7 1.9
474 test btree-9.3 {lots of tag names} {
476 .t insert 1.2 $bigText2
477 foreach i {tag1 foo ThisOne {x space} q r s t} {
480 foreach i {u tagA tagB tagC and more {$} \{} {
481 .t tag add $i 150.1 150.3
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} {
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} {
493 foreach i {foo ThisOne u tagA tagB tagC and more {$} \{} {
496 .t tag delete tag1 more q r tagA
498 } {foo ThisOne {x space} s t}
501 .t delete 1.0 100000.0
502 .t insert 1.0 "Text for first line\nSecond line\n\nLast line of info"
505 .t mark gravity l1 left
512 test btree-10.1 {basic mark facilities} {
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} {
519 lsort [.t mark names]
520 } {current insert l1 m1 m3 next x}
521 test btree-10.3 {basic mark facilities} {
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}
527 test btree-11.1 {marks and inserts} {
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} {
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} {
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} {
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} {
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} {
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}
558 test btree-12.1 {marks and deletes} {
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} {
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} {
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} {
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} {
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} {
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} {
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}
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
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"
609 .t tag next x 2.2 2.3
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"
615 .t tag next x 2.3 2.6
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"
621 .t tag next x 2.1 2.6
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"
627 .t tag next x 2.1 2.5
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"
633 .t tag next x 2.5 2.8
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"
639 .t tag next x 2.1 2.4
641 test btree-13.8 {tag searching} {
643 .t insert 1.2 $bigText2
644 .t tag add x 190.3 191.2
648 test btree-14.1 {check tag presence} {
650 .t insert 1.2 $bigText2
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
660 for {set i 120} {$i < 160} {incr i} {
663 foreach i {a1 a2 a3 a4 a5 a6 a7 a8 a9 10 a11 a12 a13} {
670 test btree-15.1 {rebalance with empty node} {
674 .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"
677 } "1\n2\n3\n4\n5\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n"
682 .t tag configure x -foreground blue
683 .t tag configure y -underline true
684 # Create a Btree with 2002 lines (2000 + already existing + phantom at end)
685 # This generates a level 3 node with 9 children
686 # Most level 2 nodes cover 216 lines and have 6 children, except the last
687 # level 2 node covers 274 lines and has 7 children.
688 # Most level 1 nodes cover 36 lines and have 6 children, except the
689 # rightmost node has 58 lines and 9 children.
690 # Level 2: 2002 = 8*216 + 274
691 # Level 1: 2002 = 54*36 + 58
692 # Level 0: 2002 = 332*6 + 10
693 for {set i 0} {$i < 2000} {incr i} {
694 append x "Line $i abcd efgh ijkl\n"
700 test btree-16.1 {add tag does not push root above level 0} {
704 .t tag add x 1.1 1.10
705 .t tag add x 5.1 5.10
707 } {1.1 1.10 5.1 5.10}
708 test btree-16.2 {add tag pushes root up to level 1 node} {
713 .t tag add x 1.1 1.10
714 .t tag add x 8.1 8.10
716 } {1.1 1.10 8.1 8.10}
717 test btree-16.3 {add tag pushes root up to level 2 node} {
718 .t tag remove x 1.0 end
719 .t tag add x 8.1 9.10
720 .t tag add x 180.1 180.end
722 } {8.1 9.10 180.1 180.23}
723 test btree-16.4 {add tag pushes root up to level 3 node} {
724 .t tag remove x 1.0 end
725 .t tag add y 1.1 2000.0
726 .t tag add x 1.1 8.10
727 .t tag add x 180.end 217.0
728 list [.t tag ranges x] [.t tag ranges y]
729 } {{1.1 8.10 180.23 217.0} {1.1 2000.0}}
730 test btree-16.5 {add tag doesn't push root up} {
731 .t tag remove x 1.0 end
732 .t tag add x 1.1 8.10
733 .t tag add x 2000.0 2000.3
734 .t tag add x 180.end 217.0
736 } {1.1 8.10 180.23 217.0 2000.0 2000.3}
737 test btree-16.6 {two node splits at once pushes root up} {
739 for {set i 1} {$i < 10} {incr i} {
740 .t insert end "Line $i\n"
742 .t tag add x 8.0 8.end
745 for {} {$i < 50} {incr i} {
749 list [.t tag ranges x] [.t tag ranges y]
750 } {{8.0 8.6} {9.0 51.0}}
751 # The following find bugs in the SearchStart procedures
752 test btree-16.7 {Partial tag remove from before first range} {
753 .t tag remove x 1.0 end
755 .t tag remove x 1.0 2.0
758 test btree-16.8 {Partial tag remove from before first range} {
759 .t tag remove x 1.0 end
761 .t tag remove x 1.0 2.1
764 test btree-16.9 {Partial tag remove from before first range} {
765 .t tag remove x 1.0 end
767 .t tag remove x 1.0 2.3
770 test btree-16.10 {Partial tag remove from before first range} {
771 .t tag remove x 1.0 end
773 .t tag remove x 1.0 2.5
776 test btree-16.11 {StartSearchBack boundary case} {
777 .t tag remove x 1.0 end
779 .t tag prevr x 2.0 1.4
781 test btree-16.12 {StartSearchBack boundary case} {
782 .t tag remove x 1.0 end
784 .t tag prevr x 2.0 1.3
786 test btree-16.13 {StartSearchBack boundary case} {
787 .t tag remove x 1.0 end
793 test btree-17.1 {remove tag does not push root down} {
798 .t tag add x 1.1 5.10
799 .t tag remove x 3.1 5.end
802 test btree-17.2 {remove tag pushes root from level 1 to level 0} {
803 .t tag remove x 1.0 end
804 .t tag add x 1.1 8.10
805 .t tag remove x 3.1 end
808 test btree-17.3 {remove tag pushes root from level 2 to level 1} {
809 .t tag remove x 1.0 end
810 .t tag add x 1.1 180.10
811 .t tag remove x 35.1 end
814 test btree-17.4 {remove tag doesn't change level 2} {
815 .t tag remove x 1.0 end
816 .t tag add x 1.1 180.10
817 .t tag remove x 35.1 180.0
819 } {1.1 35.1 180.0 180.10}
820 test btree-17.5 {remove tag pushes root from level 3 to level 0} {
821 .t tag remove x 1.0 end
822 .t tag add x 1.1 1.10
823 .t tag add x 2000.1 2000.10
824 .t tag remove x 1.0 2000.0
827 test btree-17.6 {text deletion pushes root from level 3 to level 0} {
828 .t tag remove x 1.0 end
829 .t tag add x 1.1 1.10
830 .t tag add x 2000.1 2000.10
831 .t delete 1.0 "1000.0 lineend +1 char"
837 test btree-18.1 {tag search back, no tag} {
838 .t insert 1.0 "Line 1 abcd efgh ijkl\n"
839 .t tag prev x 1.1 1.1
841 test btree-18.2 {tag search back, start at existing range} {
842 .t tag remove x 1.0 end
844 .t tag add x 1.8 1.11
848 test btree-18.3 {tag search back, end at existing range} {
849 .t tag remove x 1.0 end
851 .t tag add x 1.8 1.11
853 .t tag prev x 1.3 1.1
855 test btree-18.4 {tag search back, start within range} {
856 .t tag remove x 1.0 end
858 .t tag add x 1.8 1.11
860 .t tag prev x 1.10 1.0
862 test btree-18.5 {tag search back, start at end of range} {
863 .t tag remove x 1.0 end
865 .t tag add x 1.8 1.11
867 list [.t tag prev x 1.4 1.0] [.t tag prev x 1.11 1.0]
868 } {{1.1 1.4} {1.8 1.11}}
869 test btree-18.6 {tag search back, start beyond range, same level 0 node} {
870 .t tag remove x 1.0 end
872 .t tag add x 1.8 1.11
876 test btree-18.7 {tag search back, outside any range} {
877 .t tag remove x 1.0 end
880 .t tag prev x 1.8 1.5
882 test btree-18.8 {tag search back, start at start of node boundary} {
884 .t tag remove x 1.0 end
888 test btree-18.9 {tag search back, large complex btree spans} {
889 .t tag remove x 1.0 end
890 .t tag add x 1.3 1.end
891 .t tag add x 200.0 220.0
892 .t tag add x 500.0 520.0
893 list [.t tag prev x end] [.t tag prev x 433.0]
894 } {{500.0 520.0} {200.0 220.0}}