package com.jcwhatever.nucleus.collections; import com.jcwhatever.nucleus.collections.java.DequeRunnable; import com.jcwhatever.nucleus.utils.ArrayUtils; import org.junit.Assert; import org.junit.Test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; public class CircularQueueTest { @Test public void testDequeInterface() { CircularQueue<String> queue = new CircularQueue<>(); DequeRunnable<String> dequeTest = new DequeRunnable<>(queue, "a", "b", "c"); dequeTest.run(); } @Test public void testNext() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); Assert.assertEquals("1", queue.element()); Assert.assertEquals("2", queue.next()); Assert.assertEquals("2", queue.element()); } @Test public void testPrev() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); Assert.assertEquals("1", queue.element()); Assert.assertEquals("3", queue.prev()); Assert.assertEquals("3", queue.element()); } @Test public void testAddFirst() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.addFirst("test"); Assert.assertEquals("test", queue.getFirst()); } @Test public void testAddLast() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.addLast("test"); Assert.assertEquals("test", queue.getLast()); } @Test public void testOfferFirst() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.offerFirst("test"); Assert.assertEquals("test", queue.getFirst()); } @Test public void testOfferLast() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.offerLast("test"); Assert.assertEquals("test", queue.getLast()); } @Test public void testRemoveFirst() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.removeFirst(); Assert.assertEquals("2", queue.getFirst()); } @Test public void testRemoveLast() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.removeLast(); Assert.assertEquals("2", queue.getLast()); } @Test public void testPollFirst() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.pollFirst(); Assert.assertEquals("2", queue.getFirst()); } @Test public void testPollLast() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.pollLast(); Assert.assertEquals("2", queue.getLast()); } @Test public void testGetFirst() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); Assert.assertEquals("1", queue.getFirst()); } @Test public void testGetLast() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); Assert.assertEquals("3", queue.getLast()); } @Test public void testPeekFirst() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); Assert.assertEquals("1", queue.peekFirst()); } @Test public void testPeekLast() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); Assert.assertEquals("3", queue.peekLast()); } @Test public void testRemoveFirstOccurrence() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("1"); queue.removeFirstOccurrence("1"); Assert.assertEquals("2", queue.peekFirst()); Assert.assertEquals("1", queue.peekLast()); } @Test public void testRemoveLastOccurrence() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("1"); queue.removeLastOccurrence("1"); Assert.assertEquals("1", queue.peekFirst()); Assert.assertEquals("3", queue.peekLast()); } @Test public void testAdd() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); Assert.assertEquals("1", queue.peekFirst()); } @Test public void testOffer() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.offer("1"); Assert.assertEquals("1", queue.peekFirst()); } @Test public void testRemove() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("1"); queue.remove("1"); Assert.assertEquals("2", queue.peekFirst()); Assert.assertEquals("1", queue.peekLast()); } @Test public void testPoll() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("1"); queue.poll(); Assert.assertEquals("2", queue.peekFirst()); Assert.assertEquals("1", queue.peekLast()); } @Test public void testElement() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); Assert.assertEquals("1", queue.element()); } @Test public void testPeek() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); Assert.assertEquals("1", queue.peek()); } @Test public void testPush() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.push("0"); Assert.assertEquals("0", queue.peekFirst()); } @Test public void testPop() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.push("0"); Assert.assertEquals("0", queue.pop()); } @Test public void testRemove1() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.push("0"); Assert.assertEquals("0", queue.remove()); } @Test public void testContainsAll() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); Assert.assertEquals(true, queue.containsAll(ArrayUtils.asList("2", "4"))); Assert.assertEquals(false, queue.containsAll(ArrayUtils.asList("2", "4", "7"))); } @Test public void testAddAll() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.addAll(ArrayUtils.asList("4", "5")); Assert.assertEquals("5", queue.peekLast()); queue.prev(); Assert.assertEquals("4", queue.peekLast()); } @Test public void testRemoveAll() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); queue.removeAll(ArrayUtils.asList("4", "5")); Assert.assertEquals(3, queue.size()); Assert.assertEquals("3", queue.peekLast()); } @Test public void testRetainAll() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); queue.retainAll(ArrayUtils.asList("4", "5")); Assert.assertEquals(2, queue.size()); Assert.assertEquals("5", queue.peekLast()); } @Test public void testClear() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); queue.clear(); Assert.assertEquals(0, queue.size()); } @Test public void testContains() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); Assert.assertEquals(true, queue.contains("1")); Assert.assertEquals(true, queue.contains("2")); Assert.assertEquals(true, queue.contains("3")); Assert.assertEquals(true, queue.contains("4")); Assert.assertEquals(true, queue.contains("5")); Assert.assertEquals(false, queue.contains("6")); } @Test public void testSize() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); Assert.assertEquals(5, queue.size()); } @Test public void testIsEmpty() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); Assert.assertEquals(false, queue.isEmpty()); queue.clear(); Assert.assertEquals(true, queue.isEmpty()); } @Test public void testIterator() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); Iterator<String> iterator = queue.iterator(); List<String> copy = new ArrayList<>(5); while (iterator.hasNext()) { copy.add(iterator.next()); } Assert.assertEquals(5, copy.size()); Assert.assertEquals("1", copy.get(0)); Assert.assertEquals("2", copy.get(1)); Assert.assertEquals("3", copy.get(2)); Assert.assertEquals("4", copy.get(3)); Assert.assertEquals("5", copy.get(4)); iterator = queue.iterator(); while (iterator.hasNext()) { iterator.next(); iterator.remove(); } Assert.assertEquals(0, queue.size()); } @Test public void testToArray() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); Object[] array = queue.toArray(); Object[] expected = new Object[] { "1", "2", "3", "4", "5" }; Assert.assertArrayEquals(expected, array); } @Test public void testToArray1() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); String[] array = queue.toArray(new String[queue.size()]); String[] expected = new String[] { "1", "2", "3", "4", "5" }; Assert.assertArrayEquals(expected, array); } @Test public void testDescendingIterator() throws Exception { CircularQueue<String> queue = new CircularQueue<>(); queue.add("1"); queue.add("2"); queue.add("3"); queue.add("4"); queue.add("5"); Iterator<String> iterator = queue.descendingIterator(); List<String> copy = new ArrayList<>(5); while (iterator.hasNext()) { copy.add(iterator.next()); } Assert.assertEquals(5, copy.size()); Assert.assertEquals("5", copy.get(0)); Assert.assertEquals("4", copy.get(1)); Assert.assertEquals("3", copy.get(2)); Assert.assertEquals("2", copy.get(3)); Assert.assertEquals("1", copy.get(4)); iterator = queue.descendingIterator(); while (iterator.hasNext()) { iterator.next(); iterator.remove(); } Assert.assertEquals(0, queue.size()); iterator = queue.descendingIterator(); Assert.assertEquals(false, iterator.hasNext()); try { iterator.next(); throw new AssertionError("NoSuchElementException expected."); } catch (NoSuchElementException ignore){} queue.add("1"); iterator = queue.descendingIterator(); Assert.assertEquals(true, iterator.hasNext()); try { iterator.remove(); throw new AssertionError("IllegalStateException expected."); } catch (IllegalStateException ignore) {} } }