[cvs] / jsr166 / src / test / tck / LinkedListTest.java Repository:
ViewVC logotype

Annotation of /jsr166/src/test/tck/LinkedListTest.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.49 - (view) (download)

1 : dl 1.1 /*
2 : dl 1.7 * Written by Doug Lea with assistance from members of JCP JSR-166
3 :     * Expert Group and released to the public domain, as explained at
4 : jsr166 1.26 * http://creativecommons.org/publicdomain/zero/1.0/
5 : jsr166 1.10 * Other contributors include Andrew Wright, Jeffrey Hayes,
6 :     * Pat Fisher, Mike Judd.
7 : dl 1.1 */
8 :    
9 : jsr166 1.28 import java.util.Arrays;
10 :     import java.util.Collection;
11 :     import java.util.Iterator;
12 :     import java.util.LinkedList;
13 : jsr166 1.47 import java.util.List;
14 : jsr166 1.28 import java.util.NoSuchElementException;
15 : jsr166 1.47 import java.util.concurrent.ThreadLocalRandom;
16 : dl 1.1
17 : jsr166 1.32 import junit.framework.Test;
18 :    
19 : dl 1.3 public class LinkedListTest extends JSR166TestCase {
20 : dl 1.1 public static void main(String[] args) {
21 : jsr166 1.37 main(suite(), args);
22 : dl 1.1 }
23 :    
24 :     public static Test suite() {
25 : jsr166 1.42 class Implementation implements CollectionImplementation {
26 :     public Class<?> klazz() { return LinkedList.class; }
27 : jsr166 1.47 public List emptyCollection() { return new LinkedList(); }
28 : jsr166 1.42 public Object makeElement(int i) { return i; }
29 :     public boolean isConcurrent() { return false; }
30 :     public boolean permitsNulls() { return true; }
31 :     }
32 : jsr166 1.43 class SubListImplementation extends Implementation {
33 : jsr166 1.47 public List emptyCollection() {
34 :     List list = super.emptyCollection();
35 :     ThreadLocalRandom rnd = ThreadLocalRandom.current();
36 :     if (rnd.nextBoolean())
37 :     list.add(makeElement(rnd.nextInt()));
38 :     int i = rnd.nextInt(list.size() + 1);
39 :     return list.subList(i, i);
40 : jsr166 1.43 }
41 :     }
42 :     return newTestSuite(
43 :     LinkedListTest.class,
44 :     CollectionTest.testSuite(new Implementation()),
45 :     CollectionTest.testSuite(new SubListImplementation()));
46 : dl 1.1 }
47 :    
48 :     /**
49 : jsr166 1.31 * Returns a new queue of given size containing consecutive
50 : jsr166 1.41 * Integers 0 ... n - 1.
51 : dl 1.1 */
52 : jsr166 1.46 private static LinkedList<Integer> populatedQueue(int n) {
53 : jsr166 1.44 LinkedList<Integer> q = new LinkedList<>();
54 : dl 1.1 assertTrue(q.isEmpty());
55 : jsr166 1.13 for (int i = 0; i < n; ++i)
56 :     assertTrue(q.offer(new Integer(i)));
57 : dl 1.1 assertFalse(q.isEmpty());
58 : jsr166 1.13 assertEquals(n, q.size());
59 : jsr166 1.41 assertEquals((Integer) 0, q.peekFirst());
60 :     assertEquals((Integer) (n - 1), q.peekLast());
61 : dl 1.1 return q;
62 :     }
63 : jsr166 1.10
64 : dl 1.4 /**
65 : dl 1.5 * new queue is empty
66 : dl 1.4 */
67 :     public void testConstructor1() {
68 : dl 1.1 assertEquals(0, new LinkedList().size());
69 :     }
70 :    
71 : dl 1.4 /**
72 : dl 1.5 * Initializing from null Collection throws NPE
73 : dl 1.4 */
74 : dl 1.1 public void testConstructor3() {
75 :     try {
76 : jsr166 1.36 new LinkedList((Collection)null);
77 : dl 1.4 shouldThrow();
78 : jsr166 1.14 } catch (NullPointerException success) {}
79 : dl 1.1 }
80 :    
81 : dl 1.4 /**
82 : dl 1.5 * Queue contains all elements of collection used to initialize
83 : dl 1.4 */
84 :     public void testConstructor6() {
85 : jsr166 1.14 Integer[] ints = new Integer[SIZE];
86 :     for (int i = 0; i < SIZE; ++i)
87 : jsr166 1.16 ints[i] = i;
88 : jsr166 1.14 LinkedList q = new LinkedList(Arrays.asList(ints));
89 :     for (int i = 0; i < SIZE; ++i)
90 :     assertEquals(ints[i], q.poll());
91 : dl 1.1 }
92 :    
93 : dl 1.4 /**
94 : dl 1.5 * isEmpty is true before add, false after
95 : dl 1.4 */
96 : dl 1.1 public void testEmpty() {
97 :     LinkedList q = new LinkedList();
98 :     assertTrue(q.isEmpty());
99 :     q.add(new Integer(1));
100 :     assertFalse(q.isEmpty());
101 :     q.add(new Integer(2));
102 :     q.remove();
103 :     q.remove();
104 :     assertTrue(q.isEmpty());
105 :     }
106 :    
107 : dl 1.4 /**
108 : dl 1.5 * size changes when elements added and removed
109 : dl 1.4 */
110 : dl 1.1 public void testSize() {
111 : dl 1.3 LinkedList q = populatedQueue(SIZE);
112 :     for (int i = 0; i < SIZE; ++i) {
113 : jsr166 1.39 assertEquals(SIZE - i, q.size());
114 : dl 1.1 q.remove();
115 :     }
116 : dl 1.3 for (int i = 0; i < SIZE; ++i) {
117 : dl 1.1 assertEquals(i, q.size());
118 :     q.add(new Integer(i));
119 :     }
120 :     }
121 :    
122 : dl 1.4 /**
123 : dl 1.5 * offer(null) succeeds
124 : dl 1.4 */
125 :     public void testOfferNull() {
126 : jsr166 1.14 LinkedList q = new LinkedList();
127 :     q.offer(null);
128 : jsr166 1.38 assertNull(q.get(0));
129 :     assertTrue(q.contains(null));
130 : dl 1.1 }
131 :    
132 : dl 1.4 /**
133 : jsr166 1.10 * Offer succeeds
134 : dl 1.4 */
135 : dl 1.1 public void testOffer() {
136 :     LinkedList q = new LinkedList();
137 :     assertTrue(q.offer(new Integer(0)));
138 :     assertTrue(q.offer(new Integer(1)));
139 :     }
140 :    
141 : dl 1.4 /**
142 : dl 1.5 * add succeeds
143 : dl 1.4 */
144 :     public void testAdd() {
145 : dl 1.1 LinkedList q = new LinkedList();
146 : dl 1.3 for (int i = 0; i < SIZE; ++i) {
147 : dl 1.1 assertEquals(i, q.size());
148 :     assertTrue(q.add(new Integer(i)));
149 :     }
150 :     }
151 :    
152 : dl 1.4 /**
153 : dl 1.5 * addAll(null) throws NPE
154 : dl 1.4 */
155 :     public void testAddAll1() {
156 : jsr166 1.38 LinkedList q = new LinkedList();
157 : dl 1.1 try {
158 :     q.addAll(null);
159 : dl 1.4 shouldThrow();
160 : jsr166 1.14 } catch (NullPointerException success) {}
161 : dl 1.1 }
162 :    
163 : dl 1.4 /**
164 : dl 1.5 * Queue contains all elements, in traversal order, of successful addAll
165 : dl 1.4 */
166 :     public void testAddAll5() {
167 : jsr166 1.14 Integer[] empty = new Integer[0];
168 :     Integer[] ints = new Integer[SIZE];
169 :     for (int i = 0; i < SIZE; ++i)
170 : jsr166 1.16 ints[i] = i;
171 : jsr166 1.14 LinkedList q = new LinkedList();
172 :     assertFalse(q.addAll(Arrays.asList(empty)));
173 :     assertTrue(q.addAll(Arrays.asList(ints)));
174 :     for (int i = 0; i < SIZE; ++i)
175 :     assertEquals(ints[i], q.poll());
176 : dl 1.1 }
177 :    
178 : dl 1.4 /**
179 : dl 1.5 * addAll with too large an index throws IOOBE
180 :     */
181 :     public void testAddAll2_IndexOutOfBoundsException() {
182 : jsr166 1.14 LinkedList l = new LinkedList();
183 :     l.add(new Object());
184 :     LinkedList m = new LinkedList();
185 :     m.add(new Object());
186 : jsr166 1.13 try {
187 :     l.addAll(4,m);
188 :     shouldThrow();
189 : jsr166 1.15 } catch (IndexOutOfBoundsException success) {}
190 : dl 1.5 }
191 :    
192 :     /**
193 :     * addAll with negative index throws IOOBE
194 :     */
195 :     public void testAddAll4_BadIndex() {
196 : jsr166 1.14 LinkedList l = new LinkedList();
197 :     l.add(new Object());
198 :     LinkedList m = new LinkedList();
199 :     m.add(new Object());
200 : jsr166 1.13 try {
201 :     l.addAll(-1,m);
202 :     shouldThrow();
203 : jsr166 1.15 } catch (IndexOutOfBoundsException success) {}
204 : dl 1.5 }
205 :    
206 :     /**
207 : jsr166 1.20 * poll succeeds unless empty
208 : dl 1.4 */
209 :     public void testPoll() {
210 : dl 1.3 LinkedList q = populatedQueue(SIZE);
211 :     for (int i = 0; i < SIZE; ++i) {
212 : jsr166 1.16 assertEquals(i, q.poll());
213 : dl 1.1 }
214 : jsr166 1.13 assertNull(q.poll());
215 : dl 1.1 }
216 :    
217 : dl 1.4 /**
218 : jsr166 1.20 * peek returns next element, or null if empty
219 : dl 1.4 */
220 :     public void testPeek() {
221 : dl 1.3 LinkedList q = populatedQueue(SIZE);
222 :     for (int i = 0; i < SIZE; ++i) {
223 : jsr166 1.16 assertEquals(i, q.peek());
224 :     assertEquals(i, q.poll());
225 : dl 1.1 assertTrue(q.peek() == null ||
226 : jsr166 1.16 !q.peek().equals(i));
227 : dl 1.1 }
228 : jsr166 1.13 assertNull(q.peek());
229 : dl 1.1 }
230 :    
231 : dl 1.4 /**
232 : dl 1.6 * element returns next element, or throws NSEE if empty
233 : dl 1.4 */
234 :     public void testElement() {
235 : dl 1.3 LinkedList q = populatedQueue(SIZE);
236 :     for (int i = 0; i < SIZE; ++i) {
237 : jsr166 1.16 assertEquals(i, q.element());
238 :     assertEquals(i, q.poll());
239 : dl 1.1 }
240 :     try {
241 :     q.element();
242 : dl 1.4 shouldThrow();
243 : jsr166 1.14 } catch (NoSuchElementException success) {}
244 : dl 1.1 }
245 :    
246 : dl 1.4 /**
247 : jsr166 1.20 * remove removes next element, or throws NSEE if empty
248 : dl 1.4 */
249 :     public void testRemove() {
250 : dl 1.3 LinkedList q = populatedQueue(SIZE);
251 :     for (int i = 0; i < SIZE; ++i) {
252 : jsr166 1.16 assertEquals(i, q.remove());
253 : dl 1.1 }
254 :     try {
255 :     q.remove();
256 : dl 1.4 shouldThrow();
257 : jsr166 1.14 } catch (NoSuchElementException success) {}
258 : dl 1.1 }
259 :    
260 : dl 1.4 /**
261 : dl 1.5 * remove(x) removes x and returns true if present
262 : dl 1.4 */
263 :     public void testRemoveElement() {
264 : dl 1.3 LinkedList q = populatedQueue(SIZE);
265 : jsr166 1.33 for (int i = 1; i < SIZE; i += 2) {
266 : jsr166 1.25 assertTrue(q.contains(i));
267 :     assertTrue(q.remove((Integer)i));
268 :     assertFalse(q.contains(i));
269 : jsr166 1.40 assertTrue(q.contains(i - 1));
270 : dl 1.1 }
271 : jsr166 1.33 for (int i = 0; i < SIZE; i += 2) {
272 : jsr166 1.25 assertTrue(q.contains(i));
273 :     assertTrue(q.remove((Integer)i));
274 :     assertFalse(q.contains(i));
275 : jsr166 1.40 assertFalse(q.remove((Integer)(i + 1)));
276 :     assertFalse(q.contains(i + 1));
277 : dl 1.1 }
278 : dl 1.2 assertTrue(q.isEmpty());
279 : dl 1.1 }
280 : jsr166 1.10
281 : dl 1.4 /**
282 : dl 1.5 * contains(x) reports true when elements added but not yet removed
283 : dl 1.4 */
284 :     public void testContains() {
285 : dl 1.3 LinkedList q = populatedQueue(SIZE);
286 :     for (int i = 0; i < SIZE; ++i) {
287 : dl 1.1 assertTrue(q.contains(new Integer(i)));
288 :     q.poll();
289 :     assertFalse(q.contains(new Integer(i)));
290 :     }
291 :     }
292 :    
293 : dl 1.4 /**
294 : dl 1.5 * clear removes all elements
295 : dl 1.4 */
296 :     public void testClear() {
297 : dl 1.3 LinkedList q = populatedQueue(SIZE);
298 : dl 1.1 q.clear();
299 :     assertTrue(q.isEmpty());
300 :     assertEquals(0, q.size());
301 : jsr166 1.16 assertTrue(q.add(new Integer(1)));
302 : dl 1.1 assertFalse(q.isEmpty());
303 :     q.clear();
304 :     assertTrue(q.isEmpty());
305 :     }
306 :    
307 : dl 1.4 /**
308 : dl 1.5 * containsAll(c) is true when c contains a subset of elements
309 : dl 1.4 */
310 :     public void testContainsAll() {
311 : dl 1.3 LinkedList q = populatedQueue(SIZE);
312 : dl 1.1 LinkedList p = new LinkedList();
313 : dl 1.3 for (int i = 0; i < SIZE; ++i) {
314 : dl 1.1 assertTrue(q.containsAll(p));
315 :     assertFalse(p.containsAll(q));
316 : jsr166 1.16 assertTrue(p.add(new Integer(i)));
317 : dl 1.1 }
318 :     assertTrue(p.containsAll(q));
319 :     }
320 :    
321 : dl 1.4 /**
322 : dl 1.5 * retainAll(c) retains only those elements of c and reports true if changed
323 : dl 1.4 */
324 :     public void testRetainAll() {
325 : dl 1.3 LinkedList q = populatedQueue(SIZE);
326 :     LinkedList p = populatedQueue(SIZE);
327 :     for (int i = 0; i < SIZE; ++i) {
328 : dl 1.1 boolean changed = q.retainAll(p);
329 :     if (i == 0)
330 :     assertFalse(changed);
331 :     else
332 :     assertTrue(changed);
333 :    
334 :     assertTrue(q.containsAll(p));
335 : jsr166 1.39 assertEquals(SIZE - i, q.size());
336 : dl 1.1 p.remove();
337 :     }
338 :     }
339 :    
340 : dl 1.4 /**
341 : dl 1.6 * removeAll(c) removes only those elements of c and reports true if changed
342 : dl 1.4 */
343 :     public void testRemoveAll() {
344 : dl 1.3 for (int i = 1; i < SIZE; ++i) {
345 :     LinkedList q = populatedQueue(SIZE);
346 :     LinkedList p = populatedQueue(i);
347 : dl 1.1 assertTrue(q.removeAll(p));
348 : jsr166 1.39 assertEquals(SIZE - i, q.size());
349 : dl 1.1 for (int j = 0; j < i; ++j) {
350 : jsr166 1.34 Integer x = (Integer)(p.remove());
351 :     assertFalse(q.contains(x));
352 : dl 1.1 }
353 :     }
354 :     }
355 :    
356 : dl 1.4 /**
357 : jsr166 1.23 * toArray contains all elements in FIFO order
358 : dl 1.4 */
359 :     public void testToArray() {
360 : dl 1.3 LinkedList q = populatedQueue(SIZE);
361 : jsr166 1.48 Object[] a = q.toArray();
362 :     assertSame(Object[].class, a.getClass());
363 :     for (Object o : a)
364 :     assertSame(o, q.poll());
365 :     assertTrue(q.isEmpty());
366 : dl 1.1 }
367 :    
368 : dl 1.4 /**
369 : jsr166 1.23 * toArray(a) contains all elements in FIFO order
370 : dl 1.4 */
371 :     public void testToArray2() {
372 : jsr166 1.24 LinkedList<Integer> q = populatedQueue(SIZE);
373 : jsr166 1.13 Integer[] ints = new Integer[SIZE];
374 : jsr166 1.24 Integer[] array = q.toArray(ints);
375 :     assertSame(ints, array);
376 : jsr166 1.48 for (Integer o : ints)
377 :     assertSame(o, q.poll());
378 :     assertTrue(q.isEmpty());
379 : dl 1.1 }
380 : dl 1.5
381 :     /**
382 : jsr166 1.22 * toArray(null) throws NullPointerException
383 : dl 1.5 */
384 : jsr166 1.22 public void testToArray_NullArg() {
385 : jsr166 1.16 LinkedList l = new LinkedList();
386 :     l.add(new Object());
387 : jsr166 1.13 try {
388 : jsr166 1.49 l.toArray((Object[])null);
389 : jsr166 1.13 shouldThrow();
390 :     } catch (NullPointerException success) {}
391 : dl 1.5 }
392 :    
393 :     /**
394 : jsr166 1.21 * toArray(incompatible array type) throws ArrayStoreException
395 : dl 1.5 */
396 :     public void testToArray1_BadArg() {
397 : jsr166 1.16 LinkedList l = new LinkedList();
398 :     l.add(new Integer(5));
399 : jsr166 1.13 try {
400 : jsr166 1.21 l.toArray(new String[10]);
401 : jsr166 1.13 shouldThrow();
402 : jsr166 1.14 } catch (ArrayStoreException success) {}
403 : dl 1.5 }
404 : jsr166 1.10
405 : dl 1.4 /**
406 : jsr166 1.20 * iterator iterates through all elements
407 : dl 1.4 */
408 :     public void testIterator() {
409 : dl 1.3 LinkedList q = populatedQueue(SIZE);
410 : jsr166 1.13 Iterator it = q.iterator();
411 : jsr166 1.35 int i;
412 :     for (i = 0; it.hasNext(); i++)
413 : dl 1.1 assertTrue(q.contains(it.next()));
414 : dl 1.3 assertEquals(i, SIZE);
415 : jsr166 1.35 assertIteratorExhausted(it);
416 :     }
417 :    
418 :     /**
419 :     * iterator of empty collection has no elements
420 :     */
421 :     public void testEmptyIterator() {
422 :     assertIteratorExhausted(new LinkedList().iterator());
423 : dl 1.1 }
424 :    
425 : dl 1.4 /**
426 : jsr166 1.20 * iterator ordering is FIFO
427 : dl 1.4 */
428 : dl 1.1 public void testIteratorOrdering() {
429 :     final LinkedList q = new LinkedList();
430 :     q.add(new Integer(1));
431 :     q.add(new Integer(2));
432 :     q.add(new Integer(3));
433 :     int k = 0;
434 :     for (Iterator it = q.iterator(); it.hasNext();) {
435 : jsr166 1.16 assertEquals(++k, it.next());
436 : dl 1.1 }
437 :    
438 : dl 1.4 assertEquals(3, k);
439 : dl 1.1 }
440 :    
441 : dl 1.4 /**
442 : dl 1.5 * iterator.remove removes current element
443 : dl 1.4 */
444 : jsr166 1.19 public void testIteratorRemove() {
445 : dl 1.1 final LinkedList q = new LinkedList();
446 :     q.add(new Integer(1));
447 :     q.add(new Integer(2));
448 :     q.add(new Integer(3));
449 :     Iterator it = q.iterator();
450 : jsr166 1.29 assertEquals(1, it.next());
451 : dl 1.1 it.remove();
452 :     it = q.iterator();
453 : jsr166 1.29 assertEquals(2, it.next());
454 :     assertEquals(3, it.next());
455 : dl 1.1 assertFalse(it.hasNext());
456 :     }
457 :    
458 : dl 1.9 /**
459 : jsr166 1.20 * Descending iterator iterates through all elements
460 : dl 1.9 */
461 :     public void testDescendingIterator() {
462 :     LinkedList q = populatedQueue(SIZE);
463 :     int i = 0;
464 : jsr166 1.13 Iterator it = q.descendingIterator();
465 : jsr166 1.11 while (it.hasNext()) {
466 : dl 1.9 assertTrue(q.contains(it.next()));
467 :     ++i;
468 :     }
469 :     assertEquals(i, SIZE);
470 :     assertFalse(it.hasNext());
471 :     try {
472 :     it.next();
473 : jsr166 1.14 shouldThrow();
474 :     } catch (NoSuchElementException success) {}
475 : dl 1.9 }
476 :    
477 :     /**
478 : jsr166 1.20 * Descending iterator ordering is reverse FIFO
479 : dl 1.9 */
480 :     public void testDescendingIteratorOrdering() {
481 :     final LinkedList q = new LinkedList();
482 :     q.add(new Integer(3));
483 :     q.add(new Integer(2));
484 :     q.add(new Integer(1));
485 :     int k = 0;
486 :     for (Iterator it = q.descendingIterator(); it.hasNext();) {
487 : jsr166 1.16 assertEquals(++k, it.next());
488 : dl 1.9 }
489 :    
490 :     assertEquals(3, k);
491 :     }
492 :    
493 :     /**
494 :     * descendingIterator.remove removes current element
495 :     */
496 : jsr166 1.19 public void testDescendingIteratorRemove() {
497 : dl 1.9 final LinkedList q = new LinkedList();
498 : jsr166 1.17 q.add(three);
499 :     q.add(two);
500 :     q.add(one);
501 : dl 1.9 Iterator it = q.descendingIterator();
502 :     it.next();
503 :     it.remove();
504 :     it = q.descendingIterator();
505 : jsr166 1.17 assertSame(it.next(), two);
506 :     assertSame(it.next(), three);
507 : dl 1.9 assertFalse(it.hasNext());
508 :     }
509 :    
510 : dl 1.4 /**
511 : dl 1.5 * toString contains toStrings of elements
512 : dl 1.4 */
513 :     public void testToString() {
514 : dl 1.3 LinkedList q = populatedQueue(SIZE);
515 : dl 1.1 String s = q.toString();
516 : dl 1.3 for (int i = 0; i < SIZE; ++i) {
517 : jsr166 1.27 assertTrue(s.contains(String.valueOf(i)));
518 : dl 1.1 }
519 : jsr166 1.10 }
520 : dl 1.1
521 : dl 1.4 /**
522 : dl 1.5 * peek returns element inserted with addFirst
523 : dl 1.4 */
524 :     public void testAddFirst() {
525 : dl 1.3 LinkedList q = populatedQueue(3);
526 : jsr166 1.13 q.addFirst(four);
527 : jsr166 1.17 assertSame(four, q.peek());
528 : jsr166 1.10 }
529 : dl 1.1
530 : dl 1.8 /**
531 :     * peekFirst returns element inserted with push
532 :     */
533 :     public void testPush() {
534 :     LinkedList q = populatedQueue(3);
535 : jsr166 1.13 q.push(four);
536 : jsr166 1.17 assertSame(four, q.peekFirst());
537 : jsr166 1.10 }
538 : dl 1.8
539 :     /**
540 : jsr166 1.20 * pop removes next element, or throws NSEE if empty
541 : dl 1.8 */
542 :     public void testPop() {
543 :     LinkedList q = populatedQueue(SIZE);
544 :     for (int i = 0; i < SIZE; ++i) {
545 : jsr166 1.16 assertEquals(i, q.pop());
546 : dl 1.8 }
547 :     try {
548 :     q.pop();
549 :     shouldThrow();
550 : jsr166 1.14 } catch (NoSuchElementException success) {}
551 : dl 1.8 }
552 :    
553 :     /**
554 : jsr166 1.10 * OfferFirst succeeds
555 : dl 1.8 */
556 :     public void testOfferFirst() {
557 :     LinkedList q = new LinkedList();
558 :     assertTrue(q.offerFirst(new Integer(0)));
559 :     assertTrue(q.offerFirst(new Integer(1)));
560 :     }
561 :    
562 :     /**
563 : jsr166 1.10 * OfferLast succeeds
564 : dl 1.8 */
565 :     public void testOfferLast() {
566 :     LinkedList q = new LinkedList();
567 :     assertTrue(q.offerLast(new Integer(0)));
568 :     assertTrue(q.offerLast(new Integer(1)));
569 :     }
570 :    
571 :     /**
572 : jsr166 1.20 * pollLast succeeds unless empty
573 : dl 1.8 */
574 :     public void testPollLast() {
575 :     LinkedList q = populatedQueue(SIZE);
576 : jsr166 1.39 for (int i = SIZE - 1; i >= 0; --i) {
577 : jsr166 1.16 assertEquals(i, q.pollLast());
578 : dl 1.8 }
579 : jsr166 1.13 assertNull(q.pollLast());
580 : dl 1.8 }
581 :    
582 :     /**
583 : jsr166 1.20 * peekFirst returns next element, or null if empty
584 : dl 1.8 */
585 :     public void testPeekFirst() {
586 :     LinkedList q = populatedQueue(SIZE);
587 :     for (int i = 0; i < SIZE; ++i) {
588 : jsr166 1.16 assertEquals(i, q.peekFirst());
589 :     assertEquals(i, q.pollFirst());
590 : dl 1.8 assertTrue(q.peekFirst() == null ||
591 : jsr166 1.16 !q.peekFirst().equals(i));
592 : dl 1.8 }
593 : jsr166 1.13 assertNull(q.peekFirst());
594 : dl 1.8 }
595 :    
596 :     /**
597 : jsr166 1.20 * peekLast returns next element, or null if empty
598 : dl 1.8 */
599 :     public void testPeekLast() {
600 :     LinkedList q = populatedQueue(SIZE);
601 : jsr166 1.39 for (int i = SIZE - 1; i >= 0; --i) {
602 : jsr166 1.16 assertEquals(i, q.peekLast());
603 :     assertEquals(i, q.pollLast());
604 : dl 1.8 assertTrue(q.peekLast() == null ||
605 : jsr166 1.16 !q.peekLast().equals(i));
606 : dl 1.8 }
607 : jsr166 1.13 assertNull(q.peekLast());
608 : dl 1.8 }
609 :    
610 :     public void testFirstElement() {
611 :     LinkedList q = populatedQueue(SIZE);
612 :     for (int i = 0; i < SIZE; ++i) {
613 : jsr166 1.16 assertEquals(i, q.getFirst());
614 :     assertEquals(i, q.pollFirst());
615 : dl 1.8 }
616 :     try {
617 :     q.getFirst();
618 :     shouldThrow();
619 : jsr166 1.14 } catch (NoSuchElementException success) {}
620 : dl 1.8 }
621 :    
622 :     /**
623 : jsr166 1.20 * getLast returns next element, or throws NSEE if empty
624 : dl 1.8 */
625 :     public void testLastElement() {
626 :     LinkedList q = populatedQueue(SIZE);
627 : jsr166 1.39 for (int i = SIZE - 1; i >= 0; --i) {
628 : jsr166 1.16 assertEquals(i, q.getLast());
629 :     assertEquals(i, q.pollLast());
630 : dl 1.8 }
631 :     try {
632 :     q.getLast();
633 :     shouldThrow();
634 : jsr166 1.14 } catch (NoSuchElementException success) {}
635 : jsr166 1.13 assertNull(q.peekLast());
636 : dl 1.8 }
637 :    
638 :     /**
639 :     * removeFirstOccurrence(x) removes x and returns true if present
640 :     */
641 :     public void testRemoveFirstOccurrence() {
642 :     LinkedList q = populatedQueue(SIZE);
643 : jsr166 1.33 for (int i = 1; i < SIZE; i += 2) {
644 : dl 1.8 assertTrue(q.removeFirstOccurrence(new Integer(i)));
645 :     }
646 : jsr166 1.33 for (int i = 0; i < SIZE; i += 2) {
647 : dl 1.8 assertTrue(q.removeFirstOccurrence(new Integer(i)));
648 : jsr166 1.40 assertFalse(q.removeFirstOccurrence(new Integer(i + 1)));
649 : dl 1.8 }
650 :     assertTrue(q.isEmpty());
651 :     }
652 :    
653 :     /**
654 :     * removeLastOccurrence(x) removes x and returns true if present
655 :     */
656 :     public void testRemoveLastOccurrence() {
657 :     LinkedList q = populatedQueue(SIZE);
658 : jsr166 1.33 for (int i = 1; i < SIZE; i += 2) {
659 : dl 1.8 assertTrue(q.removeLastOccurrence(new Integer(i)));
660 :     }
661 : jsr166 1.33 for (int i = 0; i < SIZE; i += 2) {
662 : dl 1.8 assertTrue(q.removeLastOccurrence(new Integer(i)));
663 : jsr166 1.40 assertFalse(q.removeLastOccurrence(new Integer(i + 1)));
664 : dl 1.8 }
665 :     assertTrue(q.isEmpty());
666 :     }
667 :    
668 : dl 1.1 }

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8