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.Comparator; 178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Iterator; 188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.NoSuchElementException; 198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Queue; 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 Kamathimport java.util.concurrent.PriorityBlockingQueue; 258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test; 278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class PriorityBlockingQueueTest extends JSR166TestCase { 298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 30e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // android-note: These tests have been moved into their own separate 318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // classes to work around CTS issues. 328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // 338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static class Generic extends BlockingQueueTest { 348e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // protected BlockingQueue emptyCollection() { 358e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // return new PriorityBlockingQueue(); 368e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 378e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 38e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 398e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static class InitialCapacity extends BlockingQueueTest { 408e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // protected BlockingQueue emptyCollection() { 418e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // return new PriorityBlockingQueue(SIZE); 428e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 438e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 44e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 45e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // android-note: Removed because the CTS runner does a bad job of 46e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak // retrying tests that have suite() declarations. 478e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // 488e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static void main(String[] args) { 498e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // main(suite(), args); 508e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 518e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static Test suite() { 528e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // return newTestSuite(PriorityBlockingQueueTest.class, 538e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // new Generic().testSuite(), 548e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // new InitialCapacity().testSuite()); 558e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** Sample Comparator */ 588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle static class MyReverseComparator implements Comparator { 598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public int compare(Object x, Object y) { 608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return ((Comparable)y).compareTo(x); 618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Returns a new queue of given size containing consecutive 668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Integers 0 ... n. 678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle private PriorityBlockingQueue<Integer> populatedQueue(int n) { 698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue<Integer> q = 708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new PriorityBlockingQueue<Integer>(n); 718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 72e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = n - 1; i >= 0; i -= 2) 738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(new Integer(i))); 748e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (int i = (n & 1); i < n; i += 2) 758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(new Integer(i))); 768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 778e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(Integer.MAX_VALUE, q.remainingCapacity()); 788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(n, q.size()); 798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return q; 808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * A new queue has unbounded capacity 848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor1() { 868e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(Integer.MAX_VALUE, 878e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath new PriorityBlockingQueue(SIZE).remainingCapacity()); 888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Constructor throws IAE if capacity argument nonpositive 928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor2() { 948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new PriorityBlockingQueue(0); 968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Initializing from null Collection throws NPE 1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor3() { 1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new PriorityBlockingQueue(null); 1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Initializing from Collection of null elements throws NPE 1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor4() { 1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Collection<Integer> elements = Arrays.asList(new Integer[SIZE]); 1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new PriorityBlockingQueue(elements); 1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Initializing from Collection with some null elements throws NPE 1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor5() { 1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 126e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < SIZE - 1; ++i) 1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ints[i] = i; 1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Collection<Integer> elements = Arrays.asList(ints); 1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle new PriorityBlockingQueue(elements); 1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Queue contains all elements of collection used to initialize 1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor6() { 1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ints[i] = i; 1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints)); 1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(ints[i], q.poll()); 1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * The comparator used in constructor is used 1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testConstructor7() { 1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle MyReverseComparator cmp = new MyReverseComparator(); 1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE, cmp); 1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(cmp, q.comparator()); 1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ints[i] = new Integer(i); 1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.addAll(Arrays.asList(ints)); 158e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = SIZE - 1; i >= 0; --i) 1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(ints[i], q.poll()); 1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isEmpty is true before add, false after 1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testEmpty() { 1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = new PriorityBlockingQueue(2); 1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 1688e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(Integer.MAX_VALUE, q.remainingCapacity()); 1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(two); 1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.remove(); 1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.remove(); 1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1788e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath * remainingCapacity() always returns Integer.MAX_VALUE 1798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemainingCapacity() { 1818e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath BlockingQueue q = populatedQueue(SIZE); 1828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 1838e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(Integer.MAX_VALUE, q.remainingCapacity()); 1848e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(SIZE - i, q.size()); 1858e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(i, q.remove()); 1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 1888e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertEquals(Integer.MAX_VALUE, q.remainingCapacity()); 1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.size()); 1908e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertTrue(q.add(i)); 1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Offer of comparable element succeeds 1968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testOffer() { 1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = new PriorityBlockingQueue(1); 1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(zero)); 2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(one)); 2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Offer of non-Comparable throws CCE 2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testOfferNonComparable() { 2078e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath PriorityBlockingQueue q = new PriorityBlockingQueue(1); 2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.offer(new Object()); 2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.offer(new Object()); 2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ClassCastException success) {} 2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * add of comparable succeeds 2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAdd() { 2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE); 2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.size()); 2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.add(new Integer(i))); 2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addAll(this) throws IAE 2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAllSelf() { 230e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak PriorityBlockingQueue q = populatedQueue(SIZE); 2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.addAll(q); 2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) {} 2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * addAll of a collection with any null elements throws NPE after 2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * possibly adding some elements 2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAll3() { 242e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE); 243e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak Integer[] ints = new Integer[SIZE]; 244e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = 0; i < SIZE - 1; ++i) 245e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak ints[i] = new Integer(i); 2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.addAll(Arrays.asList(ints)); 2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Queue contains all elements of successful addAll 2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testAddAll5() { 2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] empty = new Integer[0]; 2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 258e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak for (int i = SIZE - 1; i >= 0; --i) 2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ints[i] = new Integer(i); 2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE); 2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.addAll(Arrays.asList(empty))); 2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.addAll(Arrays.asList(ints))); 2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(ints[i], q.poll()); 2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * all elements successfully put are contained 2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPut() { 2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE); 2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 2738e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Integer x = new Integer(i); 2748e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath q.put(x); 2758e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertTrue(q.contains(x)); 2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(SIZE, q.size()); 2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * put doesn't block waiting for take 2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPutWithTake() throws InterruptedException { 2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final PriorityBlockingQueue q = new PriorityBlockingQueue(2); 2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final int size = 4; 2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = newStartedThread(new CheckedRunnable() { 2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < size; i++) 2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(new Integer(0)); 2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle awaitTermination(t); 2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(size, q.size()); 2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.take(); 2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed offer does not time out 2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedOffer() throws InterruptedException { 3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final PriorityBlockingQueue q = new PriorityBlockingQueue(2); 3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = newStartedThread(new CheckedRunnable() { 3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(new Integer(0)); 3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.put(new Integer(0)); 3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(new Integer(0), SHORT_DELAY_MS, MILLISECONDS)); 3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(new Integer(0), LONG_DELAY_MS, MILLISECONDS)); 3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle awaitTermination(t); 3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * take retrieves elements in priority order 3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTake() throws InterruptedException { 3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.take()); 3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Take removes existing elements until empty, then blocks interruptibly 3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testBlockingTake() throws InterruptedException { 3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final PriorityBlockingQueue q = populatedQueue(SIZE); 3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch pleaseInterrupt = new CountDownLatch(1); 3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = newStartedThread(new CheckedRunnable() { 3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.take()); 3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.currentThread().interrupt(); 3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.take(); 3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) {} 3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(Thread.interrupted()); 3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle pleaseInterrupt.countDown(); 3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.take(); 3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) {} 3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(Thread.interrupted()); 3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(pleaseInterrupt); 3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertThreadStaysAlive(t); 3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.interrupt(); 3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle awaitTermination(t); 3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * poll succeeds unless empty 3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPoll() { 3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 3628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(q.poll()); 3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed poll with zero timeout succeeds when non-empty, else times out 3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedPoll0() throws InterruptedException { 3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll(0, MILLISECONDS)); 3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(q.poll(0, MILLISECONDS)); 3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed poll with nonzero timeout succeeds when non-empty, else times out 3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedPoll() throws InterruptedException { 3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue<Integer> q = populatedQueue(SIZE); 3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long startTime = System.nanoTime(); 3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, (int) q.poll(LONG_DELAY_MS, MILLISECONDS)); 3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); 3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long startTime = System.nanoTime(); 3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(q.poll(timeoutMillis(), MILLISECONDS)); 3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle checkEmpty(q); 3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Interrupted timed poll throws InterruptedException instead of 3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * returning timeout status 3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInterruptedTimedPoll() throws InterruptedException { 3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final BlockingQueue<Integer> q = populatedQueue(SIZE); 4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch aboutToWait = new CountDownLatch(1); 4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = newStartedThread(new CheckedRunnable() { 4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 403e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak long startTime = System.nanoTime(); 4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, (int) q.poll(LONG_DELAY_MS, MILLISECONDS)); 4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle aboutToWait.countDown(); 4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.poll(LONG_DELAY_MS, MILLISECONDS); 4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (InterruptedException success) { 412e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS); 4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle aboutToWait.await(); 417e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak waitForThreadToEnterWaitState(t, LONG_DELAY_MS); 4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.interrupt(); 419e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak awaitTermination(t); 4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * peek returns next element, or null if empty 4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPeek() { 4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.peek()); 4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.peek() == null || 4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle !q.peek().equals(i)); 4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(q.peek()); 4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * element returns next element, or throws NSEE if empty 4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testElement() { 4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.element()); 4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.poll()); 4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.element(); 4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NoSuchElementException success) {} 4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * remove removes next element, or throws NSEE if empty 4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemove() { 4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, q.remove()); 4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.remove(); 4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NoSuchElementException success) {} 4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * contains(x) reports true when elements added but not yet removed 4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testContains() { 4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(new Integer(i))); 4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.poll(); 4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains(new Integer(i))); 4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * clear removes all elements 4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testClear() { 4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.clear(); 4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.size()); 4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(one)); 4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.clear(); 4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * containsAll(c) is true when c contains a subset of elements 4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testContainsAll() { 4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue p = new PriorityBlockingQueue(SIZE); 4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.containsAll(p)); 5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.containsAll(q)); 5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.add(new Integer(i)); 5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.containsAll(q)); 5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * retainAll(c) retains only those elements of c and reports true if changed 5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRetainAll() { 5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue p = populatedQueue(SIZE); 5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle boolean changed = q.retainAll(p); 5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (i == 0) 5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(changed); 5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle else 5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(changed); 5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.containsAll(p)); 520e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(SIZE - i, q.size()); 5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.remove(); 5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * removeAll(c) removes only those elements of c and reports true if changed 5278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemoveAll() { 5298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 1; i < SIZE; ++i) { 5308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 5318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue p = populatedQueue(i); 5328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.removeAll(p)); 533e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(SIZE - i, q.size()); 5348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int j = 0; j < i; ++j) { 5358e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Integer x = (Integer)(p.remove()); 5368e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertFalse(q.contains(x)); 5378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toArray contains all elements 5438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToArray() throws InterruptedException { 5458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 5468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Object[] o = q.toArray(); 5478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Arrays.sort(o); 5488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < o.length; i++) 5498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(o[i], q.take()); 5508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toArray(a) contains all elements 5548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToArray2() throws InterruptedException { 5568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue<Integer> q = populatedQueue(SIZE); 5578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] ints = new Integer[SIZE]; 5588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Integer[] array = q.toArray(ints); 5598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(ints, array); 5608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Arrays.sort(ints); 5618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < ints.length; i++) 5628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(ints[i], q.take()); 5638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toArray(incompatible array type) throws ArrayStoreException 5678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToArray1_BadArg() { 5698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 5708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.toArray(new String[10]); 5728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 5738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ArrayStoreException success) {} 5748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * iterator iterates through all elements 5788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIterator() { 5808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 5818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Iterator it = q.iterator(); 5828e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath int i; 5838e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (i = 0; it.hasNext(); i++) 5848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(it.next())); 5858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(i, SIZE); 5868e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertIteratorExhausted(it); 5878e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 5888e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 5898e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath /** 5908e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath * iterator of empty collection has no elements 5918e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath */ 5928e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath public void testEmptyIterator() { 5938e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertIteratorExhausted(new PriorityBlockingQueue().iterator()); 5948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * iterator.remove removes current element 5988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIteratorRemove() { 6008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final PriorityBlockingQueue q = new PriorityBlockingQueue(3); 6018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(new Integer(2)); 6028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(new Integer(1)); 6038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(new Integer(3)); 6048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Iterator it = q.iterator(); 6068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it.next(); 6078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it.remove(); 6088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle it = q.iterator(); 6108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(it.next(), new Integer(2)); 6118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(it.next(), new Integer(3)); 6128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(it.hasNext()); 6138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * toString contains toStrings of elements 6178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testToString() { 6198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 6208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String s = q.toString(); 6218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) { 6228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(s.contains(String.valueOf(i))); 6238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed poll transfers elements across Executor tasks 6288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPollInExecutor() { 6308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final PriorityBlockingQueue q = new PriorityBlockingQueue(2); 6318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CheckedBarrier threadsStarted = new CheckedBarrier(2); 632e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak final ExecutorService executor = Executors.newFixedThreadPool(2); 633e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak try (PoolCleaner cleaner = cleaner(executor)) { 634e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak executor.execute(new CheckedRunnable() { 635e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void realRun() throws InterruptedException { 636e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertNull(q.poll()); 637e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak threadsStarted.await(); 638e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertSame(one, q.poll(LONG_DELAY_MS, MILLISECONDS)); 639e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak checkEmpty(q); 640e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak }}); 641e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak 642e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak executor.execute(new CheckedRunnable() { 643e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak public void realRun() throws InterruptedException { 644e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak threadsStarted.await(); 645e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak q.put(one); 646e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak }}); 647e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak } 6488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * A deserialized serialized queue has same elements 6528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSerialization() throws Exception { 6548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Queue x = populatedQueue(SIZE); 6558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Queue y = serialClone(x); 6568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNotSame(x, y); 6588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(x.size(), y.size()); 6598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle while (!x.isEmpty()) { 6608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(y.isEmpty()); 6618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(x.remove(), y.remove()); 6628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(y.isEmpty()); 6648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * drainTo(c) empties queue into another collection c 6688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testDrainTo() { 6708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle PriorityBlockingQueue q = populatedQueue(SIZE); 6718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayList l = new ArrayList(); 6728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.drainTo(l); 6738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.size()); 6748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(SIZE, l.size()); 6758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 6768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(l.get(i), new Integer(i)); 6778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(zero); 6788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.add(one); 6798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.isEmpty()); 6808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(zero)); 6818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(one)); 6828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.clear(); 6838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.drainTo(l); 6848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, q.size()); 6858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, l.size()); 6868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 2; ++i) 6878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(l.get(i), new Integer(i)); 6888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * drainTo empties queue 6928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testDrainToWithActivePut() throws InterruptedException { 6948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final PriorityBlockingQueue q = populatedQueue(SIZE); 6958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread t = new Thread(new CheckedRunnable() { 6968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 697e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak q.put(new Integer(SIZE + 1)); 6988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 6998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.start(); 7018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayList l = new ArrayList(); 7028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.drainTo(l); 7038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(l.size() >= SIZE); 7048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE; ++i) 7058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(l.get(i), new Integer(i)); 7068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle t.join(); 7078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.size() + l.size() >= SIZE); 7088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * drainTo(c, n) empties first min(n, size) elements of queue into c 7128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testDrainToN() { 714e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak PriorityBlockingQueue q = new PriorityBlockingQueue(SIZE * 2); 7158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < SIZE + 2; ++i) { 7168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int j = 0; j < SIZE; j++) 7178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.offer(new Integer(j))); 7188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ArrayList l = new ArrayList(); 7198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle q.drainTo(l, i); 7208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int k = (i < SIZE) ? i : SIZE; 7218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(k, l.size()); 722e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak assertEquals(SIZE - k, q.size()); 7238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int j = 0; j < k; ++j) 7248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(l.get(j), new Integer(j)); 7258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath do {} while (q.poll() != null); 7268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 7278e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 7288e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 7298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath /** 7308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath * remove(null), contains(null) always return false 7318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath */ 7328e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath public void testNeverContainsNull() { 7338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Collection<?>[] qs = { 7348e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath new PriorityBlockingQueue<Object>(), 7358e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath populatedQueue(2), 7368e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath }; 7378e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 7388e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (Collection<?> q : qs) { 7398e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertFalse(q.contains(null)); 7408e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath assertFalse(q.remove(null)); 7418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle} 745