18f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle/* 28f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Written by Doug Lea with assistance from members of JCP JSR-166 38f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Expert Group and released to the public domain, as explained at 48f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * http://creativecommons.org/publicdomain/zero/1.0/ 58f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Other contributors include Andrew Wright, Jeffrey Hayes, 68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Pat Fisher, Mike Judd. 78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 98f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166; 108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Arrays; 128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Collection; 138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Iterator; 148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.NoSuchElementException; 158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Queue; 168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ConcurrentLinkedQueue; 178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test; 198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite; 208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class ConcurrentLinkedQueueTest extends JSR166TestCase { 228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // android-note: Removed because the CTS runner does a bad job of 248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // retrying tests that have suite() declarations. 258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // 268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static void main(String[] args) { 278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // main(suite(), args); 288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static Test suite() { 30b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak // return new TestSuite(ConcurrentLinkedQueueTest.class); 318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Returns a new queue of given size containing consecutive 358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Integers 0 ... n. 368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private ConcurrentLinkedQueue<Integer> populatedQueue(int n) { 388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue<Integer> q = new ConcurrentLinkedQueue<Integer>(); 398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < n; ++i) 418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(new Integer(i))); 428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(n, q.size()); 448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return q; 458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * new queue is empty 498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor1() { 518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, new ConcurrentLinkedQueue().size()); 528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Initializing from null Collection throws NPE 568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor3() { 588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 598e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath new ConcurrentLinkedQueue((Collection)null); 608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Initializing from Collection of null elements throws NPE 668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor4() { 688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 69b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak new ConcurrentLinkedQueue(Arrays.asList(new Integer[SIZE])); 708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Initializing from Collection with some null elements throws NPE 768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor5() { 78b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak Integer[] ints = new Integer[SIZE]; 79b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak for (int i = 0; i < SIZE - 1; ++i) 80b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak ints[i] = new Integer(i); 818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 828e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath new ConcurrentLinkedQueue(Arrays.asList(ints)); 838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Queue contains all elements of collection used to initialize 898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor6() { 918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ints[i] = new Integer(i); 948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(Arrays.asList(ints)); 958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(ints[i], q.poll()); 978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isEmpty is true before add, false after 1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testEmpty() { 1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(two); 1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.remove(); 1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.remove(); 1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * size changes when elements added and removed 1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSize() { 1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 119b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(SIZE - i, q.size()); 1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.remove(); 1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.size()); 1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(new Integer(i)); 1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * offer(null) throws NPE 1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testOfferNull() { 132b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.offer(null); 1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * add(null) throws NPE 1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddNull() { 143b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(null); 1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Offer returns true 1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testOffer() { 1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(zero)); 1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(one)); 1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * add returns true 1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAdd() { 1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.size()); 1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.add(new Integer(i))); 1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addAll(null) throws NPE 1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAll1() { 174b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.addAll(null); 1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addAll(this) throws IAE 1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAllSelf() { 185b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak ConcurrentLinkedQueue q = populatedQueue(SIZE); 1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.addAll(q); 1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addAll of a collection with null elements throws NPE 1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAll2() { 196b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 198b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak q.addAll(Arrays.asList(new Integer[SIZE])); 1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addAll of a collection with any null elements throws NPE after 2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * possibly adding some elements 2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAll3() { 208b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 209b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak Integer[] ints = new Integer[SIZE]; 210b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak for (int i = 0; i < SIZE - 1; ++i) 211b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak ints[i] = new Integer(i); 2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.addAll(Arrays.asList(ints)); 2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Queue contains all elements, in traversal order, of successful addAll 2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAll5() { 2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] empty = new Integer[0]; 2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ints[i] = new Integer(i); 2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.addAll(Arrays.asList(empty))); 2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.addAll(Arrays.asList(ints))); 2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(ints[i], q.poll()); 2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * poll succeeds unless empty 2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPoll() { 2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(q.poll()); 2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * peek returns next element, or null if empty 2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPeek() { 2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.peek()); 2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.peek() == null || 2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle !q.peek().equals(i)); 2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(q.peek()); 2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * element returns next element, or throws NSEE if empty 2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testElement() { 2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.element()); 2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.element(); 2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NoSuchElementException success) {} 2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * remove removes next element, or throws NSEE if empty 2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemove() { 2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.remove()); 2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.remove(); 2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NoSuchElementException success) {} 2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * remove(x) removes x and returns true if present 2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemoveElement() { 2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 2928e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (int i = 1; i < SIZE; i += 2) { 2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(i)); 2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.remove(i)); 2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains(i)); 296b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertTrue(q.contains(i - 1)); 2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2988e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (int i = 0; i < SIZE; i += 2) { 2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(i)); 3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.remove(i)); 3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains(i)); 302b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertFalse(q.remove(i + 1)); 303b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertFalse(q.contains(i + 1)); 3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * contains(x) reports true when elements added but not yet removed 3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testContains() { 3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(new Integer(i))); 3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.poll(); 3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains(new Integer(i))); 3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * clear removes all elements 3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testClear() { 3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.clear(); 3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.size()); 3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.clear(); 3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * containsAll(c) is true when c contains a subset of elements 3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testContainsAll() { 3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue p = new ConcurrentLinkedQueue(); 3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.containsAll(p)); 3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.containsAll(q)); 3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.add(new Integer(i)); 3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.containsAll(q)); 3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * retainAll(c) retains only those elements of c and reports true if change 3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRetainAll() { 3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue p = populatedQueue(SIZE); 3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle boolean changed = q.retainAll(p); 3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (i == 0) 3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(changed); 3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle else 3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(changed); 3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.containsAll(p)); 362b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(SIZE - i, q.size()); 3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.remove(); 3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * removeAll(c) removes only those elements of c and reports true if changed 3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemoveAll() { 3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 1; i < SIZE; ++i) { 3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue p = populatedQueue(i); 3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.removeAll(p)); 375b8b75116273ecfdb8ffdd1869b1c0dd04570a95ePrzemyslaw Szczepaniak assertEquals(SIZE - i, q.size()); 3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int j = 0; j < i; ++j) { 3778e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Integer x = (Integer)(p.remove()); 3788e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertFalse(q.contains(x)); 3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toArray contains all elements in FIFO order 3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToArray() { 3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Object[] o = q.toArray(); 3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < o.length; i++) 3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(o[i], q.poll()); 3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toArray(a) contains all elements in FIFO order 3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToArray2() { 3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue<Integer> q = populatedQueue(SIZE); 3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] array = q.toArray(ints); 4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(ints, array); 4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < ints.length; i++) 4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(ints[i], q.poll()); 4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toArray(null) throws NullPointerException 4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToArray_NullArg() { 4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.toArray(null); 4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toArray(incompatible array type) throws ArrayStoreException 4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToArray1_BadArg() { 4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.toArray(new String[10]); 4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ArrayStoreException success) {} 4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * iterator iterates through all elements 4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIterator() { 4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Iterator it = q.iterator(); 4338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath int i; 4348e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (i = 0; it.hasNext(); i++) 4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(it.next())); 4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, SIZE); 4378e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertIteratorExhausted(it); 4388e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 4398e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 4408e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath /** 4418e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath * iterator of empty collection has no elements 4428e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath */ 4438e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath public void testEmptyIterator() { 4448e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertIteratorExhausted(new ConcurrentLinkedQueue().iterator()); 4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * iterator ordering is FIFO 4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIteratorOrdering() { 4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(two); 4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(three); 4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int k = 0; 4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Iterator it = q.iterator(); it.hasNext();) { 4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(++k, it.next()); 4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(3, k); 4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Modifications do not cause iterators to fail 4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testWeaklyConsistentIteration() { 4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(two); 4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(three); 4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Iterator it = q.iterator(); it.hasNext();) { 4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.remove(); 4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it.next(); 4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals("queue should be empty again", 0, q.size()); 4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * iterator.remove removes current element 4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIteratorRemove() { 4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ConcurrentLinkedQueue q = new ConcurrentLinkedQueue(); 4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(two); 4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(three); 4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Iterator it = q.iterator(); 4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it.next(); 4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it.remove(); 4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it = q.iterator(); 4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(it.next(), two); 4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(it.next(), three); 4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(it.hasNext()); 4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toString contains toStrings of elements 5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToString() { 5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ConcurrentLinkedQueue q = populatedQueue(SIZE); 5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String s = q.toString(); 5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(s.contains(String.valueOf(i))); 5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * A deserialized serialized queue has same elements in same order 5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSerialization() throws Exception { 5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Queue x = populatedQueue(SIZE); 5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Queue y = serialClone(x); 5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNotSame(x, y); 5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(x.size(), y.size()); 5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(x.toString(), y.toString()); 5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(Arrays.equals(x.toArray(), y.toArray())); 5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle while (!x.isEmpty()) { 5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(y.isEmpty()); 5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(x.remove(), y.remove()); 5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(y.isEmpty()); 5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath /** 5288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath * remove(null), contains(null) always return false 5298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath */ 5308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath public void testNeverContainsNull() { 5318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Collection<?>[] qs = { 5328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath new ConcurrentLinkedQueue<Object>(), 5338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath populatedQueue(2), 5348e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath }; 5358e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 5368e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (Collection<?> q : qs) { 5378e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertFalse(q.contains(null)); 5388e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertFalse(q.remove(null)); 5398e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 5408e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle} 542