--- jsr166/src/test/tck/LinkedListTest.java 2003/12/27 19:26:43 1.7 +++ jsr166/src/test/tck/LinkedListTest.java 2009/11/16 05:30:07 1.12 @@ -2,8 +2,8 @@ * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain - * Other contributors include Andrew Wright, Jeffrey Hayes, - * Pat Fisher, Mike Judd. + * Other contributors include Andrew Wright, Jeffrey Hayes, + * Pat Fisher, Mike Judd. */ import junit.framework.*; @@ -12,7 +12,7 @@ import java.util.concurrent.*; public class LinkedListTest extends JSR166TestCase { public static void main(String[] args) { - junit.textui.TestRunner.run (suite()); + junit.textui.TestRunner.run (suite()); } public static Test suite() { @@ -26,13 +26,13 @@ public class LinkedListTest extends JSR1 private LinkedList populatedQueue(int n) { LinkedList q = new LinkedList(); assertTrue(q.isEmpty()); - for(int i = 0; i < n; ++i) + for (int i = 0; i < n; ++i) assertTrue(q.offer(new Integer(i))); assertFalse(q.isEmpty()); assertEquals(n, q.size()); return q; } - + /** * new queue is empty */ @@ -103,13 +103,13 @@ public class LinkedListTest extends JSR1 try { LinkedList q = new LinkedList(); q.offer(null); - } catch (NullPointerException ie) { + } catch (NullPointerException ie) { unexpectedException(); - } + } } /** - * Offer succeeds + * Offer succeeds */ public void testOffer() { LinkedList q = new LinkedList(); @@ -169,7 +169,7 @@ public class LinkedListTest extends JSR1 m.add(new Object()); l.addAll(4,m); shouldThrow(); - } catch(IndexOutOfBoundsException success) {} + } catch (IndexOutOfBoundsException success) {} } /** @@ -183,7 +183,7 @@ public class LinkedListTest extends JSR1 m.add(new Object()); l.addAll(-1,m); shouldThrow(); - } catch(IndexOutOfBoundsException success){} + } catch (IndexOutOfBoundsException success) {} } /** @@ -238,8 +238,8 @@ public class LinkedListTest extends JSR1 try { q.remove(); shouldThrow(); - } catch (NoSuchElementException success){ - } + } catch (NoSuchElementException success) { + } } /** @@ -256,7 +256,7 @@ public class LinkedListTest extends JSR1 } assertTrue(q.isEmpty()); } - + /** * contains(x) reports true when elements added but not yet removed */ @@ -339,7 +339,7 @@ public class LinkedListTest extends JSR1 LinkedList q = populatedQueue(SIZE); Object[] o = q.toArray(); Arrays.sort(o); - for(int i = 0; i < o.length; i++) + for (int i = 0; i < o.length; i++) assertEquals(o[i], q.poll()); } @@ -351,7 +351,7 @@ public class LinkedListTest extends JSR1 Integer[] ints = new Integer[SIZE]; ints = (Integer[])q.toArray(ints); Arrays.sort(ints); - for(int i = 0; i < ints.length; i++) + for (int i = 0; i < ints.length; i++) assertEquals(ints[i], q.poll()); } @@ -364,7 +364,7 @@ public class LinkedListTest extends JSR1 l.add(new Object()); Object o[] = l.toArray(null); shouldThrow(); - } catch(NullPointerException success){} + } catch (NullPointerException success) {} } /** @@ -376,9 +376,9 @@ public class LinkedListTest extends JSR1 l.add(new Integer(5)); Object o[] = l.toArray(new String[10] ); shouldThrow(); - } catch(ArrayStoreException success){} + } catch (ArrayStoreException success) {} } - + /** * iterator iterates through all elements */ @@ -386,7 +386,7 @@ public class LinkedListTest extends JSR1 LinkedList q = populatedQueue(SIZE); int i = 0; Iterator it = q.iterator(); - while(it.hasNext()) { + while (it.hasNext()) { assertTrue(q.contains(it.next())); ++i; } @@ -427,6 +427,59 @@ public class LinkedListTest extends JSR1 assertFalse(it.hasNext()); } + /** + * Descending iterator iterates through all elements + */ + public void testDescendingIterator() { + LinkedList q = populatedQueue(SIZE); + int i = 0; + Iterator it = q.descendingIterator(); + while (it.hasNext()) { + assertTrue(q.contains(it.next())); + ++i; + } + assertEquals(i, SIZE); + assertFalse(it.hasNext()); + try { + it.next(); + } catch (NoSuchElementException success) { + } + } + + /** + * Descending iterator ordering is reverse FIFO + */ + public void testDescendingIteratorOrdering() { + final LinkedList q = new LinkedList(); + q.add(new Integer(3)); + q.add(new Integer(2)); + q.add(new Integer(1)); + int k = 0; + for (Iterator it = q.descendingIterator(); it.hasNext();) { + int i = ((Integer)(it.next())).intValue(); + assertEquals(++k, i); + } + + assertEquals(3, k); + } + + /** + * descendingIterator.remove removes current element + */ + public void testDescendingIteratorRemove () { + final LinkedList q = new LinkedList(); + q.add(new Integer(3)); + q.add(new Integer(2)); + q.add(new Integer(1)); + Iterator it = q.descendingIterator(); + it.next(); + it.remove(); + it = q.descendingIterator(); + assertEquals(it.next(), new Integer(2)); + assertEquals(it.next(), new Integer(3)); + assertFalse(it.hasNext()); + } + /** * toString contains toStrings of elements @@ -437,7 +490,7 @@ public class LinkedListTest extends JSR1 for (int i = 0; i < SIZE; ++i) { assertTrue(s.indexOf(String.valueOf(i)) >= 0); } - } + } /** * peek returns element inserted with addFirst @@ -446,6 +499,149 @@ public class LinkedListTest extends JSR1 LinkedList q = populatedQueue(3); q.addFirst(four); assertEquals(four,q.peek()); - } + } + + /** + * peekFirst returns element inserted with push + */ + public void testPush() { + LinkedList q = populatedQueue(3); + q.pollLast(); + q.push(four); + assertEquals(four,q.peekFirst()); + } + + /** + * pop removes next element, or throws NSEE if empty + */ + public void testPop() { + LinkedList q = populatedQueue(SIZE); + for (int i = 0; i < SIZE; ++i) { + assertEquals(i, ((Integer)q.pop()).intValue()); + } + try { + q.pop(); + shouldThrow(); + } catch (NoSuchElementException success) { + } + } + + /** + * OfferFirst succeeds + */ + public void testOfferFirst() { + LinkedList q = new LinkedList(); + assertTrue(q.offerFirst(new Integer(0))); + assertTrue(q.offerFirst(new Integer(1))); + } + + /** + * OfferLast succeeds + */ + public void testOfferLast() { + LinkedList q = new LinkedList(); + assertTrue(q.offerLast(new Integer(0))); + assertTrue(q.offerLast(new Integer(1))); + } + + /** + * pollLast succeeds unless empty + */ + public void testPollLast() { + LinkedList q = populatedQueue(SIZE); + for (int i = SIZE-1; i >= 0; --i) { + assertEquals(i, ((Integer)q.pollLast()).intValue()); + } + assertNull(q.pollLast()); + } + + /** + * peekFirst returns next element, or null if empty + */ + public void testPeekFirst() { + LinkedList q = populatedQueue(SIZE); + for (int i = 0; i < SIZE; ++i) { + assertEquals(i, ((Integer)q.peekFirst()).intValue()); + q.pollFirst(); + assertTrue(q.peekFirst() == null || + i != ((Integer)q.peekFirst()).intValue()); + } + assertNull(q.peekFirst()); + } + + + /** + * peekLast returns next element, or null if empty + */ + public void testPeekLast() { + LinkedList q = populatedQueue(SIZE); + for (int i = SIZE-1; i >= 0; --i) { + assertEquals(i, ((Integer)q.peekLast()).intValue()); + q.pollLast(); + assertTrue(q.peekLast() == null || + i != ((Integer)q.peekLast()).intValue()); + } + assertNull(q.peekLast()); + } + + public void testFirstElement() { + LinkedList q = populatedQueue(SIZE); + for (int i = 0; i < SIZE; ++i) { + assertEquals(i, ((Integer)q.getFirst()).intValue()); + q.pollFirst(); + } + try { + q.getFirst(); + shouldThrow(); + } + catch (NoSuchElementException success) {} + } + + /** + * getLast returns next element, or throws NSEE if empty + */ + public void testLastElement() { + LinkedList q = populatedQueue(SIZE); + for (int i = SIZE-1; i >= 0; --i) { + assertEquals(i, ((Integer)q.getLast()).intValue()); + q.pollLast(); + } + try { + q.getLast(); + shouldThrow(); + } + catch (NoSuchElementException success) {} + assertNull(q.peekLast()); + } + + /** + * removeFirstOccurrence(x) removes x and returns true if present + */ + public void testRemoveFirstOccurrence() { + LinkedList q = populatedQueue(SIZE); + for (int i = 1; i < SIZE; i+=2) { + assertTrue(q.removeFirstOccurrence(new Integer(i))); + } + for (int i = 0; i < SIZE; i+=2) { + assertTrue(q.removeFirstOccurrence(new Integer(i))); + assertFalse(q.removeFirstOccurrence(new Integer(i+1))); + } + assertTrue(q.isEmpty()); + } + + /** + * removeLastOccurrence(x) removes x and returns true if present + */ + public void testRemoveLastOccurrence() { + LinkedList q = populatedQueue(SIZE); + for (int i = 1; i < SIZE; i+=2) { + assertTrue(q.removeLastOccurrence(new Integer(i))); + } + for (int i = 0; i < SIZE; i+=2) { + assertTrue(q.removeLastOccurrence(new Integer(i))); + assertFalse(q.removeLastOccurrence(new Integer(i+1))); + } + assertTrue(q.isEmpty()); + } }