/* * Copyright (C) 2012 The Guava Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.elasticsearch.common.collect; import org.elasticsearch.common.util.CollectionUtils; import org.elasticsearch.test.ESTestCase; import java.util.Collections; import java.util.NoSuchElementException; public class EvictingQueueTests extends ESTestCase { public void testCreateWithNegativeSize() throws Exception { try { new EvictingQueue<>(-1); fail(); } catch (IllegalArgumentException expected) { } } public void testCreateWithZeroSize() throws Exception { EvictingQueue<String> queue = new EvictingQueue<>(0); assertEquals(0, queue.size()); assertTrue(queue.add("hi")); assertEquals(0, queue.size()); assertTrue(queue.offer("hi")); assertEquals(0, queue.size()); assertFalse(queue.remove("hi")); assertEquals(0, queue.size()); try { queue.element(); fail(); } catch (NoSuchElementException expected) {} assertNull(queue.peek()); assertNull(queue.poll()); try { queue.remove(); fail(); } catch (NoSuchElementException expected) {} } public void testRemainingCapacityMaximumSizeZero() { EvictingQueue<String> queue = new EvictingQueue<>(0); assertEquals(0, queue.remainingCapacity()); } public void testRemainingCapacityMaximumSizeOne() { EvictingQueue<String> queue = new EvictingQueue<>(1); assertEquals(1, queue.remainingCapacity()); queue.add("hi"); assertEquals(0, queue.remainingCapacity()); } public void testRemainingCapacityMaximumSizeThree() { EvictingQueue<String> queue = new EvictingQueue<>(3); assertEquals(3, queue.remainingCapacity()); queue.add("hi"); assertEquals(2, queue.remainingCapacity()); queue.add("hi"); assertEquals(1, queue.remainingCapacity()); queue.add("hi"); assertEquals(0, queue.remainingCapacity()); } public void testEvictingAfterOne() throws Exception { EvictingQueue<String> queue = new EvictingQueue<>(1); assertEquals(0, queue.size()); assertEquals(1, queue.remainingCapacity()); assertTrue(queue.add("hi")); assertEquals("hi", queue.element()); assertEquals("hi", queue.peek()); assertEquals(1, queue.size()); assertEquals(0, queue.remainingCapacity()); assertTrue(queue.add("there")); assertEquals("there", queue.element()); assertEquals("there", queue.peek()); assertEquals(1, queue.size()); assertEquals(0, queue.remainingCapacity()); assertEquals("there", queue.remove()); assertEquals(0, queue.size()); assertEquals(1, queue.remainingCapacity()); } public void testEvictingAfterThree() throws Exception { EvictingQueue<String> queue = new EvictingQueue<>(3); assertEquals(0, queue.size()); assertEquals(3, queue.remainingCapacity()); assertTrue(queue.add("one")); assertTrue(queue.add("two")); assertTrue(queue.add("three")); assertEquals("one", queue.element()); assertEquals("one", queue.peek()); assertEquals(3, queue.size()); assertEquals(0, queue.remainingCapacity()); assertTrue(queue.add("four")); assertEquals("two", queue.element()); assertEquals("two", queue.peek()); assertEquals(3, queue.size()); assertEquals(0, queue.remainingCapacity()); assertEquals("two", queue.remove()); assertEquals(2, queue.size()); assertEquals(1, queue.remainingCapacity()); } public void testAddAll() throws Exception { EvictingQueue<String> queue = new EvictingQueue<>(3); assertEquals(0, queue.size()); assertEquals(3, queue.remainingCapacity()); assertTrue(queue.addAll(CollectionUtils.arrayAsArrayList("one", "two", "three"))); assertEquals("one", queue.element()); assertEquals("one", queue.peek()); assertEquals(3, queue.size()); assertEquals(0, queue.remainingCapacity()); assertTrue(queue.addAll(Collections.singletonList("four"))); assertEquals("two", queue.element()); assertEquals("two", queue.peek()); assertEquals(3, queue.size()); assertEquals(0, queue.remainingCapacity()); assertEquals("two", queue.remove()); assertEquals(2, queue.size()); assertEquals(1, queue.remainingCapacity()); } }