/* * Copyright 2013 MovingBlocks * * 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.terasology.utilities.collection; import com.google.common.collect.ImmutableList; import org.junit.Test; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** */ public class CircularBufferTest { @Test public void testAddItems() { CircularBuffer<Integer> buffer = CircularBuffer.create(4); for (int i = 0; i < 100; ++i) { buffer.add(i); assertEquals((Integer) i, buffer.getLast()); } } @Test public void testRemoveItems() { CircularBuffer<Integer> buffer = CircularBuffer.create(4); buffer.add(1); buffer.add(2); buffer.add(3); buffer.add(4); buffer.add(5); assertEquals(4, buffer.size()); assertEquals((Integer) 2, buffer.getFirst()); assertEquals((Integer) 2, buffer.popFirst()); assertEquals((Integer) 3, buffer.getFirst()); assertEquals(3, buffer.size()); assertEquals((Integer) 5, buffer.popLast()); assertEquals((Integer) 4, buffer.popLast()); assertEquals((Integer) 3, buffer.getLast()); assertEquals((Integer) 3, buffer.popLast()); assertTrue(buffer.isEmpty()); } @Test public void testCollectionMethods() { Collection<Integer> buffer = CircularBuffer.create(4); buffer.addAll(ImmutableList.of(1, 2, 3, 4, 5, 6)); buffer.add(4); assertTrue(buffer.contains(5)); assertTrue(buffer.containsAll(ImmutableList.of(5, 4))); } @Test public void testGetSet() { CircularBuffer<Integer> buffer = CircularBuffer.create(4); buffer.addAll(ImmutableList.of(11, 12, 0, 1, 2, 3)); assertEquals((Integer) 0, buffer.get(0)); assertEquals((Integer) 3, buffer.get(3)); assertEquals((Integer) 2, buffer.set(2, 8)); assertEquals((Integer) 8, buffer.get(2)); assertEquals((Integer) 0, buffer.set(0, 5)); assertEquals((Integer) 5, buffer.get(0)); assertEquals((Integer) 3, buffer.set(3, 6)); assertEquals((Integer) 6, buffer.get(3)); } @Test public void testInsert() { CircularBuffer<Integer> buffer = CircularBuffer.create(4); buffer.addAll(ImmutableList.of(1, 2, 5, 7)); // remove from the middle assertEquals((Integer) 2, buffer.remove(1)); assertEquals((Integer) 5, buffer.get(1)); // remove from the left side assertEquals((Integer) 1, buffer.remove(0)); // remove from the right side assertEquals((Integer) 7, buffer.remove(1)); // remove the only element assertEquals((Integer) 5, buffer.remove(0)); assertTrue(buffer.isEmpty()); } @Test public void testIterator1() { CircularBuffer<Integer> buffer = CircularBuffer.create(2); buffer.addAll(ImmutableList.of(1, 2)); Iterator<Integer> iterator = buffer.iterator(); iterator.next(); iterator.remove(); } @Test public void testIterator2() { CircularBuffer<Integer> buffer = CircularBuffer.create(2); buffer.addAll(ImmutableList.of(1, 2)); Iterator<Integer> iterator = buffer.iterator(); iterator.next(); iterator.remove(); iterator.next(); iterator.remove(); assertTrue(buffer.isEmpty()); } @Test(expected = IllegalStateException.class) public void testIteratorRemoveTwice() { CircularBuffer<Integer> buffer = CircularBuffer.create(2); buffer.addAll(ImmutableList.of(1, 2)); Iterator<Integer> iterator = buffer.iterator(); iterator.next(); iterator.remove(); iterator.remove(); } @Test(expected = IllegalStateException.class) public void testIteratorRemoveWithoutNext() { CircularBuffer<Integer> buffer = CircularBuffer.create(2); buffer.addAll(ImmutableList.of(1, 2)); buffer.iterator().remove(); } @Test(expected = NoSuchElementException.class) public void testIteratorAfterEnd() { CircularBuffer<Integer> buffer = CircularBuffer.create(1); buffer.add(1); Iterator<Integer> it = buffer.iterator(); it.next(); it.remove(); it.next(); it.remove(); } }