10888a09821a98ac0680fad765217302858e70fa4Paul Duffin/* 20888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Copyright (C) 2012 The Guava Authors 30888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 40888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 50888a09821a98ac0680fad765217302858e70fa4Paul Duffin * you may not use this file except in compliance with the License. 60888a09821a98ac0680fad765217302858e70fa4Paul Duffin * You may obtain a copy of the License at 70888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 80888a09821a98ac0680fad765217302858e70fa4Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 90888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 100888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Unless required by applicable law or agreed to in writing, software 110888a09821a98ac0680fad765217302858e70fa4Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 120888a09821a98ac0680fad765217302858e70fa4Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130888a09821a98ac0680fad765217302858e70fa4Paul Duffin * See the License for the specific language governing permissions and 140888a09821a98ac0680fad765217302858e70fa4Paul Duffin * limitations under the License. 150888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 160888a09821a98ac0680fad765217302858e70fa4Paul Duffin 170888a09821a98ac0680fad765217302858e70fa4Paul Duffinpackage com.google.common.collect; 180888a09821a98ac0680fad765217302858e70fa4Paul Duffin 190888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static java.util.Arrays.asList; 200888a09821a98ac0680fad765217302858e70fa4Paul Duffin 210888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.testing.NullPointerTester; 220888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.testing.SerializableTester; 230888a09821a98ac0680fad765217302858e70fa4Paul Duffin 240888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase; 250888a09821a98ac0680fad765217302858e70fa4Paul Duffin 260888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.NoSuchElementException; 270888a09821a98ac0680fad765217302858e70fa4Paul Duffin 280888a09821a98ac0680fad765217302858e70fa4Paul Duffin/** 290888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Tests for {@link EvictingQueue}. 300888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 310888a09821a98ac0680fad765217302858e70fa4Paul Duffin * @author Kurt Alfred Kluever 320888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 330888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic class EvictingQueueTest extends TestCase { 340888a09821a98ac0680fad765217302858e70fa4Paul Duffin 350888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testCreateWithNegativeSize() throws Exception { 360888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 370888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue.create(-1); 380888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 390888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (IllegalArgumentException expected) { 400888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 410888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin 430888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testCreateWithZeroSize() throws Exception { 440888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue<String> queue = EvictingQueue.create(0); 450888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.size()); 460888a09821a98ac0680fad765217302858e70fa4Paul Duffin 470888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(queue.add("hi")); 480888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.size()); 490888a09821a98ac0680fad765217302858e70fa4Paul Duffin 500888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(queue.offer("hi")); 510888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.size()); 520888a09821a98ac0680fad765217302858e70fa4Paul Duffin 530888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertFalse(queue.remove("hi")); 540888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.size()); 550888a09821a98ac0680fad765217302858e70fa4Paul Duffin 560888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 570888a09821a98ac0680fad765217302858e70fa4Paul Duffin queue.element(); 580888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 590888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NoSuchElementException expected) {} 600888a09821a98ac0680fad765217302858e70fa4Paul Duffin 610888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertNull(queue.peek()); 620888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertNull(queue.poll()); 630888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 640888a09821a98ac0680fad765217302858e70fa4Paul Duffin queue.remove(); 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NoSuchElementException expected) {} 670888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 680888a09821a98ac0680fad765217302858e70fa4Paul Duffin 690888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testRemainingCapacity_maxSize0() { 700888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue<String> queue = EvictingQueue.create(0); 710888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.remainingCapacity()); 720888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 730888a09821a98ac0680fad765217302858e70fa4Paul Duffin 740888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testRemainingCapacity_maxSize1() { 750888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue<String> queue = EvictingQueue.create(1); 760888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(1, queue.remainingCapacity()); 770888a09821a98ac0680fad765217302858e70fa4Paul Duffin queue.add("hi"); 780888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.remainingCapacity()); 790888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 800888a09821a98ac0680fad765217302858e70fa4Paul Duffin 810888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testRemainingCapacity_maxSize3() { 820888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue<String> queue = EvictingQueue.create(3); 830888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(3, queue.remainingCapacity()); 840888a09821a98ac0680fad765217302858e70fa4Paul Duffin queue.add("hi"); 850888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(2, queue.remainingCapacity()); 860888a09821a98ac0680fad765217302858e70fa4Paul Duffin queue.add("hi"); 870888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(1, queue.remainingCapacity()); 880888a09821a98ac0680fad765217302858e70fa4Paul Duffin queue.add("hi"); 890888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.remainingCapacity()); 900888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 910888a09821a98ac0680fad765217302858e70fa4Paul Duffin 920888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testEvictingAfterOne() throws Exception { 930888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue<String> queue = EvictingQueue.create(1); 940888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.size()); 950888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(1, queue.remainingCapacity()); 960888a09821a98ac0680fad765217302858e70fa4Paul Duffin 970888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(queue.add("hi")); 980888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("hi", queue.element()); 990888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("hi", queue.peek()); 1000888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(1, queue.size()); 1010888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.remainingCapacity()); 1020888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1030888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(queue.add("there")); 1040888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("there", queue.element()); 1050888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("there", queue.peek()); 1060888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(1, queue.size()); 1070888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.remainingCapacity()); 1080888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1090888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("there", queue.remove()); 1100888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.size()); 1110888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(1, queue.remainingCapacity()); 1120888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1130888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1140888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testEvictingAfterThree() throws Exception { 1150888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue<String> queue = EvictingQueue.create(3); 1160888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.size()); 1170888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(3, queue.remainingCapacity()); 1180888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1190888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(queue.add("one")); 1200888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(queue.add("two")); 1210888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(queue.add("three")); 1220888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("one", queue.element()); 1230888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("one", queue.peek()); 1240888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(3, queue.size()); 1250888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.remainingCapacity()); 1260888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1270888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(queue.add("four")); 1280888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("two", queue.element()); 1290888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("two", queue.peek()); 1300888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(3, queue.size()); 1310888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.remainingCapacity()); 1320888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1330888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("two", queue.remove()); 1340888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(2, queue.size()); 1350888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(1, queue.remainingCapacity()); 1360888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1370888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1380888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testAddAll() throws Exception { 1390888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue<String> queue = EvictingQueue.create(3); 1400888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.size()); 1410888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(3, queue.remainingCapacity()); 1420888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1430888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(queue.addAll(asList("one", "two", "three"))); 1440888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("one", queue.element()); 1450888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("one", queue.peek()); 1460888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(3, queue.size()); 1470888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.remainingCapacity()); 1480888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1490888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(queue.addAll(asList("four"))); 1500888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("two", queue.element()); 1510888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("two", queue.peek()); 1520888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(3, queue.size()); 1530888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, queue.remainingCapacity()); 1540888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1550888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("two", queue.remove()); 1560888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(2, queue.size()); 1570888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(1, queue.remainingCapacity()); 1580888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1590888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1600888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testNullPointerExceptions() { 1610888a09821a98ac0680fad765217302858e70fa4Paul Duffin NullPointerTester tester = new NullPointerTester(); 1620888a09821a98ac0680fad765217302858e70fa4Paul Duffin tester.testAllPublicStaticMethods(EvictingQueue.class); 1630888a09821a98ac0680fad765217302858e70fa4Paul Duffin tester.testAllPublicConstructors(EvictingQueue.class); 1640888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue<String> queue = EvictingQueue.create(5); 1650888a09821a98ac0680fad765217302858e70fa4Paul Duffin // The queue must be non-empty so it throws a NPE correctly 1660888a09821a98ac0680fad765217302858e70fa4Paul Duffin queue.add("one"); 1670888a09821a98ac0680fad765217302858e70fa4Paul Duffin tester.testAllPublicInstanceMethods(queue); 1680888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1690888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1700888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testSerialization() { 1710888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue<String> original = EvictingQueue.create(5); 1720888a09821a98ac0680fad765217302858e70fa4Paul Duffin original.add("one"); 1730888a09821a98ac0680fad765217302858e70fa4Paul Duffin original.add("two"); 1740888a09821a98ac0680fad765217302858e70fa4Paul Duffin original.add("three"); 1750888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1760888a09821a98ac0680fad765217302858e70fa4Paul Duffin EvictingQueue<String> copy = SerializableTester.reserialize(original); 1770888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(copy.maxSize, original.maxSize); 1780888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("one", copy.remove()); 1790888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("two", copy.remove()); 1800888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("three", copy.remove()); 1810888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(copy.isEmpty()); 1820888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1830888a09821a98ac0680fad765217302858e70fa4Paul Duffin} 184