@@ -76,6 +76,35 @@ CTAVLTreeTest >> testCollect [
7676 self assert: doubled asArray equals: #(40 60 80 100 140)
7777]
7878
79+ { #category : ' tests' }
80+ CTAVLTreeTest >> testComplexRotations [
81+
82+ " Test more complex rotation scenarios"
83+ tree addAll: #(50 30 70 20 40 60 80 10) .
84+ self assert: tree validate.
85+
86+ " Add more elements to trigger multiple rotations"
87+ tree addAll: #(5 15 25 35 45) .
88+ self assert: tree validate.
89+
90+ " Height should remain logarithmic"
91+ self assert: tree height <= 5
92+ ]
93+
94+ { #category : ' tests' }
95+ CTAVLTreeTest >> testCopy [
96+
97+ | copiedTree |
98+ tree addAll: #(50 30 70) .
99+ copiedTree := tree copy.
100+
101+ self assert: copiedTree size equals: tree size.
102+ self assert: copiedTree asArray equals: tree asArray.
103+ copiedTree add: 99 .
104+ self deny: (tree includes: 99 ).
105+ self assert: (copiedTree includes: 99 )
106+ ]
107+
79108{ #category : ' tests' }
80109CTAVLTreeTest >> testDetect [
81110
@@ -159,6 +188,16 @@ CTAVLTreeTest >> testEmpty [
159188 self assert: tree height equals: 0
160189]
161190
191+ { #category : ' tests' }
192+ CTAVLTreeTest >> testEmptyTreeOperations [
193+
194+ self assert: tree findMin isNil.
195+ self assert: tree findMax isNil.
196+ self deny: (tree includes: 42 ).
197+
198+ self deny: (tree anySatisfy: [ :each | true ])
199+ ]
200+
162201{ #category : ' tests' }
163202CTAVLTreeTest >> testFindMinMax [
164203
@@ -199,6 +238,18 @@ CTAVLTreeTest >> testHeight [
199238 self assert: tree height equals: 2
200239]
201240
241+ { #category : ' tests' }
242+ CTAVLTreeTest >> testIfEmptyIfNotEmpty [
243+
244+ | result |
245+ result := tree ifEmpty: [ #empty ].
246+ self assert: result equals: #empty .
247+
248+ tree add: 42 .
249+ result := tree ifNotEmpty: [ :t | #notEmpty ].
250+ self assert: result equals: #notEmpty
251+ ]
252+
202253{ #category : ' tests' }
203254CTAVLTreeTest >> testInOrderTraversal [
204255
@@ -221,6 +272,17 @@ CTAVLTreeTest >> testIncludes [
221272 self deny: (tree includes: 99 )
222273]
223274
275+ { #category : ' tests' }
276+ CTAVLTreeTest >> testIsLeaf [
277+
278+ tree add: 50 .
279+ self assert: tree root isLeaf.
280+
281+ tree add: 30 .
282+ self deny: tree root isLeaf.
283+ self assert: tree root left isLeaf
284+ ]
285+
224286{ #category : ' tests' }
225287CTAVLTreeTest >> testLLRotation [
226288
@@ -243,6 +305,27 @@ CTAVLTreeTest >> testLRRotation [
243305 self assert: tree asArray equals: #(1 2 3)
244306]
245307
308+ { #category : ' tests' }
309+ CTAVLTreeTest >> testNegativeNumbers [
310+
311+ tree addAll: #(-10 -5 0 5 10) .
312+
313+ self assert: tree findMin equals: - 10 .
314+ self assert: tree findMax equals: 10 .
315+ self assert: tree asArray equals: #(-10 -5 0 5 10) .
316+ self assert: tree validate
317+ ]
318+
319+ { #category : ' tests' }
320+ CTAVLTreeTest >> testParentChildRelationships [
321+
322+ tree addAll: #(50 30 70 20 40) .
323+
324+ self assert: tree root parent isNil.
325+ self assert: tree root left parent equals: tree root.
326+ self assert: tree root right parent equals: tree root
327+ ]
328+
246329{ #category : ' tests' }
247330CTAVLTreeTest >> testPostOrderTraversal [
248331
@@ -300,6 +383,31 @@ CTAVLTreeTest >> testRRRotation [
300383 self assert: tree asArray equals: #(1 2 3)
301384]
302385
386+ { #category : ' tests' }
387+ CTAVLTreeTest >> testRemovalCausingRebalancing [
388+
389+ tree addAll: #(50 30 70 20 40 60 80 10 25) .
390+
391+ " Remove elements that should trigger rebalancing"
392+ tree remove: 10 .
393+ tree remove: 20 .
394+ tree remove: 25 .
395+
396+ self assert: tree validate
397+ ]
398+
399+ { #category : ' tests' }
400+ CTAVLTreeTest >> testRemoveAll [
401+
402+ tree addAll: #(50 30 70 20 40) .
403+ tree removeAll: #(30 70) .
404+
405+ self assert: tree size equals: 3 .
406+ self deny: (tree includes: 30 ).
407+ self deny: (tree includes: 70 ).
408+ self assert: tree validate
409+ ]
410+
303411{ #category : ' tests' }
304412CTAVLTreeTest >> testRemoveLeafNode [
305413
@@ -355,6 +463,18 @@ CTAVLTreeTest >> testRemoveRoot [
355463 self assert: tree validate
356464]
357465
466+ { #category : ' tests' }
467+ CTAVLTreeTest >> testReverseInsertions [
468+
469+ 15 to: 1 by: - 1 do: [ :i |
470+ tree add: i.
471+ self assert: tree validate
472+ ].
473+
474+ self assert: tree height <= 5 .
475+ self assert: tree asArray equals: (1 to: 15 ) asArray
476+ ]
477+
358478{ #category : ' tests' }
359479CTAVLTreeTest >> testSelect [
360480
@@ -365,6 +485,19 @@ CTAVLTreeTest >> testSelect [
365485 self assert: evens asArray equals: #(20 30 40 50 70)
366486]
367487
488+ { #category : ' tests' }
489+ CTAVLTreeTest >> testSequentialInsertions [
490+
491+ " Test inserting elements in order (worst case for unbalanced BST)"
492+ 1 to: 15 do: [ :i |
493+ tree add: i.
494+ self assert: tree validate
495+ ].
496+
497+ " Height should remain logarithmic"
498+ self assert: tree height <= 5
499+ ]
500+
368501{ #category : ' tests' }
369502CTAVLTreeTest >> testValidation [
370503
0 commit comments