1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.core.avltree;
21
22
23 import static org.junit.Assert.*;
24
25 import java.util.Comparator;
26
27 import org.apache.directory.server.core.cursor.InvalidCursorPositionException;
28 import org.junit.Test;
29
30
31
32
33
34
35
36
37 public class AvlTreeCursorTest
38 {
39 @Test
40 public void testEmptyCursor() throws Exception
41 {
42 AvlTree<Integer> tree = new AvlTree<Integer>( new IntegerComparator() );
43 AvlTreeCursor<Integer> cursor = new AvlTreeCursor<Integer>( tree );
44
45 assertFalse( cursor.isClosed() );
46 assertFalse( cursor.available() );
47 assertTrue( cursor.isElementReused() );
48
49 try
50 {
51 cursor.get();
52 fail( "Should not get here" );
53 }
54 catch ( InvalidCursorPositionException e )
55 {
56 assertNotNull( e );
57 }
58
59 cursor.beforeFirst();
60 assertFalse( cursor.available() );
61
62 cursor.afterLast();
63 assertFalse( cursor.available() );
64
65 assertFalse( cursor.first() );
66 assertFalse( cursor.available() );
67
68 assertFalse( cursor.last() );
69 assertFalse( cursor.available() );
70
71 assertFalse( cursor.next() );
72 assertFalse( cursor.available() );
73
74 assertFalse( cursor.previous() );
75 assertFalse( cursor.available() );
76
77 cursor.before( 3 );
78 assertFalse( cursor.available() );
79
80 cursor.after( 3 );
81 assertFalse( cursor.available() );
82
83 cursor.close();
84 assertTrue( cursor.isClosed() );
85 }
86
87
88 @Test
89 public void testOneEntryCursor() throws Exception
90 {
91 AvlTree<Integer> tree = new AvlTree<Integer>( new IntegerComparator() );
92 tree.insert( 7 );
93 AvlTreeCursor<Integer> cursor = new AvlTreeCursor<Integer>( tree );
94
95 assertFalse( cursor.isClosed() );
96 assertFalse( cursor.available() );
97 assertTrue( cursor.isElementReused() );
98
99 try
100 {
101 cursor.get();
102 fail( "Should not get here" );
103 }
104 catch ( InvalidCursorPositionException e )
105 {
106 assertNotNull( e );
107 }
108
109 cursor.beforeFirst();
110 assertFalse( cursor.available() );
111 assertFalse( cursor.previous() );
112 assertTrue( cursor.next() );
113 assertTrue( cursor.available() );
114 assertEquals( 7, ( int ) cursor.get() );
115
116 cursor.afterLast();
117 assertFalse( cursor.next() );
118 assertFalse( cursor.available() );
119
120 assertTrue( cursor.first() );
121 assertTrue( cursor.available() );
122
123 assertTrue( cursor.last() );
124 assertTrue( cursor.available() );
125
126 assertFalse( cursor.next() );
127 assertFalse( cursor.available() );
128
129 assertTrue( cursor.previous() );
130 assertTrue( cursor.available() );
131
132 cursor.before( 3 );
133 assertFalse( cursor.available() );
134 assertTrue( cursor.next() );
135 assertTrue( cursor.available() );
136 assertEquals( 7, ( int ) cursor.get() );
137
138 cursor.after( 3 );
139 assertFalse( cursor.available() );
140 assertTrue( cursor.next() );
141 assertTrue( cursor.available() );
142 assertEquals( 7, ( int ) cursor.get() );
143
144 cursor.before( 7 );
145 assertFalse( cursor.available() );
146 assertTrue( cursor.next() );
147 assertTrue( cursor.available() );
148 assertEquals( 7, ( int ) cursor.get() );
149 }
150
151
152 @Test
153 public void testManyEntriesCursor() throws Exception
154 {
155 AvlTree<Integer> tree = new AvlTree<Integer>( new IntegerComparator() );
156 tree.insert( 3 );
157 tree.insert( 7 );
158 tree.insert( 10 );
159 tree.insert( 11 );
160 AvlTreeCursor<Integer> cursor = new AvlTreeCursor<Integer>( tree );
161
162 assertFalse( cursor.isClosed() );
163 assertFalse( cursor.available() );
164 assertTrue( cursor.isElementReused() );
165 assertEquals( 4, tree.getSize() );
166
167 try
168 {
169 cursor.get();
170 fail( "Should not get here" );
171 }
172 catch ( InvalidCursorPositionException e )
173 {
174 assertNotNull( e );
175 }
176
177 cursor.beforeFirst();
178 assertFalse( cursor.available() );
179 assertTrue( cursor.next() );
180 assertTrue( cursor.available() );
181 assertEquals( 3, ( int ) cursor.get() );
182 assertTrue( cursor.next() );
183 assertTrue( cursor.available() );
184 assertEquals( 7, ( int ) cursor.get() );
185 assertTrue( cursor.next() );
186 assertTrue( cursor.available() );
187 assertEquals( 10, ( int ) cursor.get() );
188 assertTrue( cursor.next() );
189 assertTrue( cursor.available() );
190 assertEquals( 11, ( int ) cursor.get() );
191 assertFalse( cursor.next() );
192 assertFalse( cursor.available() );
193
194
195 cursor.afterLast();
196 assertFalse( cursor.available() );
197 assertTrue( cursor.previous() );
198 assertTrue( cursor.available() );
199 assertEquals( 11, ( int ) cursor.get() );
200 assertTrue( cursor.previous() );
201 assertTrue( cursor.available() );
202 assertEquals( 10, ( int ) cursor.get() );
203 assertTrue( cursor.previous() );
204 assertTrue( cursor.available() );
205 assertEquals( 7, ( int ) cursor.get() );
206 assertTrue( cursor.previous() );
207 assertTrue( cursor.available() );
208 assertEquals( 3, ( int ) cursor.get() );
209 assertFalse( cursor.previous() );
210 assertFalse( cursor.available() );
211
212 assertTrue( cursor.first() );
213 assertTrue( cursor.available() );
214
215 assertTrue( cursor.last() );
216 assertTrue( cursor.available() );
217
218 assertFalse( cursor.next() );
219 assertFalse( cursor.available() );
220
221 assertTrue( cursor.previous() );
222 assertTrue( cursor.available() );
223
224 cursor.after( 5 );
225 assertTrue( cursor.next() );
226 assertTrue( cursor.available() );
227 assertEquals( 7, ( int ) cursor.get() );
228
229
230 cursor.before( 11 );
231 assertTrue( cursor.next() );
232 assertTrue( cursor.available() );
233 assertEquals( 11, ( int ) cursor.get() );
234
235 }
236
237
238 class IntegerComparator implements Comparator<Integer>
239 {
240 public int compare( Integer o1, Integer o2 )
241 {
242 return o1.compareTo( o2 );
243 }
244 }
245 }