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 118e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport static java.util.concurrent.TimeUnit.MILLISECONDS; 128e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.ArrayList; 148e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.Arrays; 158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Collection; 168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Iterator; 178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.NoSuchElementException; 188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Queue; 198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ArrayBlockingQueue; 208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.BlockingQueue; 218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.CountDownLatch; 228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.Executors; 238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.ExecutorService; 248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test; 268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class ArrayBlockingQueueTest extends JSR166TestCase { 288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 29e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // android-note: These tests have been moved into their own separate 308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // classes to work around CTS issues. 318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // 328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static class Fair extends BlockingQueueTest { 338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // protected BlockingQueue emptyCollection() { 348e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // return new ArrayBlockingQueue(SIZE, true); 358e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 368e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 37e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 388e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static class NonFair extends BlockingQueueTest { 398e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // protected BlockingQueue emptyCollection() { 408e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // return new ArrayBlockingQueue(SIZE, false); 418e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 428e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 43e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 44e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // android-note: Removed because the CTS runner does a bad job of 45e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // retrying tests that have suite() declarations. 468e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // 478e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static void main(String[] args) { 488e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // main(suite(), args); 498e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 508e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static Test suite() { 518e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // return newTestSuite(ArrayBlockingQueueTest.class, 528e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // new Fair().testSuite(), 538e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // new NonFair().testSuite()); 548e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 558e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Returns a new queue of given size containing consecutive 588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Integers 0 ... n. 598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private ArrayBlockingQueue<Integer> populatedQueue(int n) { 618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue<Integer> q = new ArrayBlockingQueue<Integer>(n); 628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < n; i++) 648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(new Integer(i))); 658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.remainingCapacity()); 678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(n, q.size()); 688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return q; 698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * A new queue has the indicated capacity 738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor1() { 758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(SIZE, new ArrayBlockingQueue(SIZE).remainingCapacity()); 768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws IAE if capacity argument nonpositive 808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor2() { 828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue(0); 848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Initializing from null Collection throws NPE 908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor3() { 928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue(1, true, null); 948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Initializing from Collection of null elements throws NPE 1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor4() { 1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Collection<Integer> elements = Arrays.asList(new Integer[SIZE]); 1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue(SIZE, false, elements); 1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Initializing from Collection with some null elements throws NPE 1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor5() { 1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 114e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < SIZE - 1; ++i) 1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ints[i] = i; 1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Collection<Integer> elements = Arrays.asList(ints); 1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath new ArrayBlockingQueue(SIZE, false, elements); 1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Initializing from too large collection throws IAE 1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor6() { 1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ints[i] = i; 1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Collection<Integer> elements = Arrays.asList(ints); 1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new ArrayBlockingQueue(SIZE - 1, false, elements); 1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Queue contains all elements of collection used to initialize 1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor7() { 1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ints[i] = i; 1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Collection<Integer> elements = Arrays.asList(ints); 1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE, true, elements); 1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(ints[i], q.poll()); 1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Queue transitions from empty to full when elements added 1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testEmptyFull() { 1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = new ArrayBlockingQueue(2); 1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, q.remainingCapacity()); 1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(two); 1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.remainingCapacity()); 1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.offer(three)); 1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * remainingCapacity decreases on add, increases on remove 1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemainingCapacity() { 1698e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath BlockingQueue q = populatedQueue(SIZE); 1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.remainingCapacity()); 1728e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(SIZE, q.size() + q.remainingCapacity()); 1738e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(i, q.remove()); 1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 176e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(SIZE - i, q.remainingCapacity()); 1778e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(SIZE, q.size() + q.remainingCapacity()); 1788e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertTrue(q.add(i)); 1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Offer succeeds if not full; fails if full 1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testOffer() { 1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = new ArrayBlockingQueue(1); 1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(zero)); 1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.offer(one)); 1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * add succeeds if not full; throws ISE if full 1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAdd() { 1958e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); 1968e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (int i = 0; i < SIZE; ++i) { 1978e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertTrue(q.add(new Integer(i))); 1988e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 1998e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(0, q.remainingCapacity()); 2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(new Integer(SIZE)); 2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalStateException success) {} 2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addAll(this) throws IAE 2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAllSelf() { 2108e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath ArrayBlockingQueue q = populatedQueue(SIZE); 2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.addAll(q); 2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addAll of a collection with any null elements throws NPE after 2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * possibly adding some elements 2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAll3() { 2228e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); 2238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Integer[] ints = new Integer[SIZE]; 224e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < SIZE - 1; ++i) 2258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath ints[i] = new Integer(i); 2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.addAll(Arrays.asList(ints)); 2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addAll throws ISE if not enough room 2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAll4() { 2368e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath ArrayBlockingQueue q = new ArrayBlockingQueue(1); 2378e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Integer[] ints = new Integer[SIZE]; 2388e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (int i = 0; i < SIZE; ++i) 2398e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath ints[i] = new Integer(i); 2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.addAll(Arrays.asList(ints)); 2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalStateException success) {} 2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Queue contains all elements, in traversal order, of successful addAll 2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAll5() { 2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] empty = new Integer[0]; 2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ints[i] = new Integer(i); 2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); 2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.addAll(Arrays.asList(empty))); 2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.addAll(Arrays.asList(ints))); 2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(ints[i], q.poll()); 2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * all elements successfully put are contained 2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPut() throws InterruptedException { 2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); 2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 2678e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Integer x = new Integer(i); 2688e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath q.put(x); 2698e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertTrue(q.contains(x)); 2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.remainingCapacity()); 2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * put blocks interruptibly if full 2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testBlockingPut() throws InterruptedException { 2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); 2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch pleaseInterrupt = new CountDownLatch(1); 2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = newStartedThread(new CheckedRunnable() { 2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(i); 2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(SIZE, q.size()); 2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.remainingCapacity()); 2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.currentThread().interrupt(); 2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(99); 2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) {} 2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(Thread.interrupted()); 2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle pleaseInterrupt.countDown(); 2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(99); 2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) {} 2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(Thread.interrupted()); 3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(pleaseInterrupt); 3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertThreadStaysAlive(t); 3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.interrupt(); 3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle awaitTermination(t); 3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(SIZE, q.size()); 3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.remainingCapacity()); 3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * put blocks interruptibly waiting for take when full 3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPutWithTake() throws InterruptedException { 3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final int capacity = 2; 3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ArrayBlockingQueue q = new ArrayBlockingQueue(capacity); 3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch pleaseTake = new CountDownLatch(1); 3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch pleaseInterrupt = new CountDownLatch(1); 3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = newStartedThread(new CheckedRunnable() { 3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < capacity; i++) 3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(i); 3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle pleaseTake.countDown(); 3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(86); 3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle pleaseInterrupt.countDown(); 3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(99); 3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) {} 3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(Thread.interrupted()); 3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(pleaseTake); 3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.remainingCapacity()); 3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.take()); 3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(pleaseInterrupt); 3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertThreadStaysAlive(t); 3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.interrupt(); 3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle awaitTermination(t); 3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.remainingCapacity()); 3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed offer times out if full and elements not taken 3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedOffer() throws InterruptedException { 3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ArrayBlockingQueue q = new ArrayBlockingQueue(2); 3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch pleaseInterrupt = new CountDownLatch(1); 3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = newStartedThread(new CheckedRunnable() { 3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(new Object()); 3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(new Object()); 3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long startTime = System.nanoTime(); 3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.offer(new Object(), timeoutMillis(), MILLISECONDS)); 3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle pleaseInterrupt.countDown(); 3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.offer(new Object(), 2 * LONG_DELAY_MS, MILLISECONDS); 3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) {} 3628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(pleaseInterrupt); 3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertThreadStaysAlive(t); 3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.interrupt(); 3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle awaitTermination(t); 3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * take retrieves elements in FIFO order 3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTake() throws InterruptedException { 3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.take()); 3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Take removes existing elements until empty, then blocks interruptibly 3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testBlockingTake() throws InterruptedException { 3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ArrayBlockingQueue q = populatedQueue(SIZE); 3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch pleaseInterrupt = new CountDownLatch(1); 3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = newStartedThread(new CheckedRunnable() { 3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.take()); 3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.currentThread().interrupt(); 3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.take(); 3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) {} 3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(Thread.interrupted()); 3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle pleaseInterrupt.countDown(); 4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.take(); 4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) {} 4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(Thread.interrupted()); 4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(pleaseInterrupt); 4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertThreadStaysAlive(t); 4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.interrupt(); 4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle awaitTermination(t); 4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * poll succeeds unless empty 4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPoll() { 4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(q.poll()); 4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed poll with zero timeout succeeds when non-empty, else times out 4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedPoll0() throws InterruptedException { 4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll(0, MILLISECONDS)); 4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(q.poll(0, MILLISECONDS)); 4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkEmpty(q); 4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed poll with nonzero timeout succeeds when non-empty, else times out 4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedPoll() throws InterruptedException { 4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long startTime = System.nanoTime(); 4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll(LONG_DELAY_MS, MILLISECONDS)); 4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); 4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long startTime = System.nanoTime(); 4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(q.poll(timeoutMillis(), MILLISECONDS)); 4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkEmpty(q); 4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Interrupted timed poll throws InterruptedException instead of 4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * returning timeout status 4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInterruptedTimedPoll() throws InterruptedException { 4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final BlockingQueue<Integer> q = populatedQueue(SIZE); 4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch aboutToWait = new CountDownLatch(1); 4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = newStartedThread(new CheckedRunnable() { 4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 461e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak long startTime = System.nanoTime(); 4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, (int) q.poll(LONG_DELAY_MS, MILLISECONDS)); 4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle aboutToWait.countDown(); 4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 467e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak q.poll(LONG_DELAY_MS, MILLISECONDS); 4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) { 470e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); 4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 474e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak await(aboutToWait); 475e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak waitForThreadToEnterWaitState(t, LONG_DELAY_MS); 4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.interrupt(); 477e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak awaitTermination(t); 4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkEmpty(q); 4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * peek returns next element, or null if empty 4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPeek() { 4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.peek()); 4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.peek() == null || 4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle !q.peek().equals(i)); 4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(q.peek()); 4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * element returns next element, or throws NSEE if empty 4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testElement() { 4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.element()); 5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.element(); 5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NoSuchElementException success) {} 5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * remove removes next element, or throws NSEE if empty 5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemove() { 5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.remove()); 5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.remove(); 5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NoSuchElementException success) {} 5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * contains(x) reports true when elements added but not yet removed 5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testContains() { 5288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 5298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 5308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(new Integer(i))); 5318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 5328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains(new Integer(i))); 5338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * clear removes all elements 5388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testClear() { 5408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.clear(); 5428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 5438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.size()); 5448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(SIZE, q.remainingCapacity()); 5458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 5468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 5478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(one)); 5488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.clear(); 5498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 5508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * containsAll(c) is true when c contains a subset of elements 5548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testContainsAll() { 5568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 5578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue p = new ArrayBlockingQueue(SIZE); 5588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 5598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.containsAll(p)); 5608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.containsAll(q)); 5618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.add(new Integer(i)); 5628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.containsAll(q)); 5648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * retainAll(c) retains only those elements of c and reports true if changed 5688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRetainAll() { 5708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 5718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue p = populatedQueue(SIZE); 5728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 5738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle boolean changed = q.retainAll(p); 5748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (i == 0) 5758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(changed); 5768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle else 5778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(changed); 5788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.containsAll(p)); 580e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(SIZE - i, q.size()); 5818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.remove(); 5828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * removeAll(c) removes only those elements of c and reports true if changed 5878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemoveAll() { 5898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 1; i < SIZE; ++i) { 5908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 5918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue p = populatedQueue(i); 5928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.removeAll(p)); 593e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(SIZE - i, q.size()); 5948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int j = 0; j < i; ++j) { 5958e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Integer x = (Integer)(p.remove()); 5968e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertFalse(q.contains(x)); 5978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkToArray(ArrayBlockingQueue q) { 6028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int size = q.size(); 6038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Object[] o = q.toArray(); 6048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(size, o.length); 6058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Iterator it = q.iterator(); 6068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < size; i++) { 6078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer x = (Integer) it.next(); 6088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals((Integer)o[0] + i, (int) x); 6098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(o[i], x); 6108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toArray() contains all elements in FIFO order 6158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToArray() { 6178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); 6188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; i++) { 6198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkToArray(q); 6208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(i); 6218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // Provoke wraparound 6238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; i++) { 6248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkToArray(q); 6258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 6268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkToArray(q); 627e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak q.add(SIZE + i); 6288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; i++) { 6308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkToArray(q); 631e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(SIZE + i, q.poll()); 6328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle void checkToArray2(ArrayBlockingQueue q) { 6368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int size = q.size(); 637e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Integer[] a1 = (size == 0) ? null : new Integer[size - 1]; 6388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] a2 = new Integer[size]; 639e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Integer[] a3 = new Integer[size + 2]; 6408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (size > 0) Arrays.fill(a1, 42); 6418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Arrays.fill(a2, 42); 6428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Arrays.fill(a3, 42); 643e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Integer[] b1 = (size == 0) ? null : (Integer[]) q.toArray(a1); 6448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] b2 = (Integer[]) q.toArray(a2); 6458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] b3 = (Integer[]) q.toArray(a3); 6468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(a2, b2); 6478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(a3, b3); 6488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Iterator it = q.iterator(); 6498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < size; i++) { 6508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer x = (Integer) it.next(); 6518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(b1[i], x); 6528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(b1[0] + i, (int) x); 6538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(b2[i], x); 6548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(b3[i], x); 6558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(a3[size]); 657e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(42, (int) a3[size + 1]); 6588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (size > 0) { 6598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNotSame(a1, b1); 6608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(size, b1.length); 6618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < a1.length; i++) { 6628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(42, (int) a1[i]); 6638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toArray(a) contains all elements in FIFO order 6698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToArray2() { 6718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE); 6728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; i++) { 6738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkToArray2(q); 6748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(i); 6758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // Provoke wraparound 6778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; i++) { 6788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkToArray2(q); 6798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 6808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkToArray2(q); 681e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak q.add(SIZE + i); 6828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; i++) { 6848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkToArray2(q); 685e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(SIZE + i, q.poll()); 6868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toArray(incompatible array type) throws ArrayStoreException 6918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToArray1_BadArg() { 6938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 6948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.toArray(new String[10]); 6968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 6978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ArrayStoreException success) {} 6988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * iterator iterates through all elements 7028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIterator() throws InterruptedException { 7048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 7058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Iterator it = q.iterator(); 7068e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath int i; 7078e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (i = 0; it.hasNext(); i++) 7088e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertTrue(q.contains(it.next())); 7098e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(i, SIZE); 7108e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertIteratorExhausted(it); 7118e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 7128e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath it = q.iterator(); 7138e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (i = 0; it.hasNext(); i++) 7148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(it.next(), q.take()); 7158e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(i, SIZE); 7168e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertIteratorExhausted(it); 7178e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 7188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 7198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath /** 7208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath * iterator of empty collection has no elements 7218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath */ 7228e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath public void testEmptyIterator() { 7238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertIteratorExhausted(new ArrayBlockingQueue(SIZE).iterator()); 7248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * iterator.remove removes current element 7288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIteratorRemove() { 7308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ArrayBlockingQueue q = new ArrayBlockingQueue(3); 7318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(two); 7328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 7338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(three); 7348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Iterator it = q.iterator(); 7368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it.next(); 7378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it.remove(); 7388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it = q.iterator(); 7408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(it.next(), one); 7418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(it.next(), three); 7428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(it.hasNext()); 7438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * iterator ordering is FIFO 7478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIteratorOrdering() { 7498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ArrayBlockingQueue q = new ArrayBlockingQueue(3); 7508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 7518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(two); 7528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(three); 7538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals("queue should be full", 0, q.remainingCapacity()); 7558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int k = 0; 7578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Iterator it = q.iterator(); it.hasNext();) { 7588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(++k, it.next()); 7598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(3, k); 7618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Modifications do not cause iterators to fail 7658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testWeaklyConsistentIteration() { 7678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ArrayBlockingQueue q = new ArrayBlockingQueue(3); 7688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 7698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(two); 7708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(three); 7718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Iterator it = q.iterator(); it.hasNext();) { 7728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.remove(); 7738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it.next(); 7748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.size()); 7768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toString contains toStrings of elements 7808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToString() { 7828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 7838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String s = q.toString(); 7848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 7858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(s.contains(String.valueOf(i))); 7868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * offer transfers elements across Executor tasks 7918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testOfferInExecutor() { 7938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ArrayBlockingQueue q = new ArrayBlockingQueue(2); 7948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 7958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(two); 7968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CheckedBarrier threadsStarted = new CheckedBarrier(2); 797e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak final ExecutorService executor = Executors.newFixedThreadPool(2); 798e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak try (PoolCleaner cleaner = cleaner(executor)) { 799e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak executor.execute(new CheckedRunnable() { 800e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void realRun() throws InterruptedException { 801e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertFalse(q.offer(three)); 802e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak threadsStarted.await(); 803e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(q.offer(three, LONG_DELAY_MS, MILLISECONDS)); 804e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(0, q.remainingCapacity()); 805e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak }}); 806e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 807e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak executor.execute(new CheckedRunnable() { 808e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void realRun() throws InterruptedException { 809e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak threadsStarted.await(); 810e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(0, q.remainingCapacity()); 811e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertSame(one, q.take()); 812e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak }}); 813e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 8148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed poll retrieves elements across Executor threads 8188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPollInExecutor() { 8208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ArrayBlockingQueue q = new ArrayBlockingQueue(2); 8218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CheckedBarrier threadsStarted = new CheckedBarrier(2); 822e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak final ExecutorService executor = Executors.newFixedThreadPool(2); 823e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak try (PoolCleaner cleaner = cleaner(executor)) { 824e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak executor.execute(new CheckedRunnable() { 825e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void realRun() throws InterruptedException { 826e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(q.poll()); 827e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak threadsStarted.await(); 828e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertSame(one, q.poll(LONG_DELAY_MS, MILLISECONDS)); 829e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak checkEmpty(q); 830e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak }}); 831e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 832e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak executor.execute(new CheckedRunnable() { 833e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void realRun() throws InterruptedException { 834e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak threadsStarted.await(); 835e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak q.put(one); 836e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak }}); 837e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 8388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * A deserialized serialized queue has same elements in same order 8428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSerialization() throws Exception { 8448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Queue x = populatedQueue(SIZE); 8458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Queue y = serialClone(x); 8468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNotSame(x, y); 8488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(x.size(), y.size()); 8498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(x.toString(), y.toString()); 8508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(Arrays.equals(x.toArray(), y.toArray())); 8518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle while (!x.isEmpty()) { 8528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(y.isEmpty()); 8538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(x.remove(), y.remove()); 8548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(y.isEmpty()); 8568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * drainTo(c) empties queue into another collection c 8608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testDrainTo() { 8628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayBlockingQueue q = populatedQueue(SIZE); 8638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayList l = new ArrayList(); 8648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.drainTo(l); 8658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.size()); 8668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(SIZE, l.size()); 8678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 8688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(l.get(i), new Integer(i)); 8698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(zero); 8708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 8718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 8728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(zero)); 8738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(one)); 8748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.clear(); 8758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.drainTo(l); 8768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.size()); 8778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, l.size()); 8788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 2; ++i) 8798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(l.get(i), new Integer(i)); 8808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * drainTo empties full queue, unblocking a waiting put. 8848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testDrainToWithActivePut() throws InterruptedException { 8868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ArrayBlockingQueue q = populatedQueue(SIZE); 8878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = new Thread(new CheckedRunnable() { 8888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 889e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak q.put(new Integer(SIZE + 1)); 8908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 8918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.start(); 8938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayList l = new ArrayList(); 8948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.drainTo(l); 8958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(l.size() >= SIZE); 8968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 8978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(l.get(i), new Integer(i)); 8988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.join(); 8998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.size() + l.size() >= SIZE); 9008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * drainTo(c, n) empties first min(n, size) elements of queue into c 9048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testDrainToN() { 906e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ArrayBlockingQueue q = new ArrayBlockingQueue(SIZE * 2); 9078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE + 2; ++i) { 9088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int j = 0; j < SIZE; j++) 9098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(new Integer(j))); 9108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayList l = new ArrayList(); 9118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.drainTo(l, i); 9128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int k = (i < SIZE) ? i : SIZE; 9138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(k, l.size()); 914e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(SIZE - k, q.size()); 9158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int j = 0; j < k; ++j) 9168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(l.get(j), new Integer(j)); 9178e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath do {} while (q.poll() != null); 9188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath /** 9228e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath * remove(null), contains(null) always return false 9238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath */ 9248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath public void testNeverContainsNull() { 9258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Collection<?>[] qs = { 9268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath new ArrayBlockingQueue<Object>(10), 9278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath populatedQueue(2), 9288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath }; 9298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 9308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (Collection<?> q : qs) { 9318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertFalse(q.contains(null)); 9328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertFalse(q.remove(null)); 9338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 9348e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 9358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle} 936