Add unit tests for RingBuffer functionality
This commit is contained in:
142
src/test/java/de/extio/game_engine/util/RingBufferTest.java
Normal file
142
src/test/java/de/extio/game_engine/util/RingBufferTest.java
Normal file
@@ -0,0 +1,142 @@
|
||||
package de.extio.game_engine.util;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class RingBufferTest {
|
||||
|
||||
private RingBuffer<String> buffer;
|
||||
private static final int CAPACITY = 3;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
this.buffer = new RingBuffer<>(CAPACITY);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testConstructor() {
|
||||
assertEquals(CAPACITY, this.buffer.capacity());
|
||||
assertEquals(0, this.buffer.size());
|
||||
assertFalse(this.buffer.isFull());
|
||||
assertThrows(IllegalArgumentException.class, () -> new RingBuffer<>(0));
|
||||
assertThrows(IllegalArgumentException.class, () -> new RingBuffer<>(-1));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testOffer() {
|
||||
assertTrue(this.buffer.offer("A"));
|
||||
assertEquals(1, this.buffer.size());
|
||||
assertEquals("A", this.buffer.peek());
|
||||
|
||||
assertTrue(this.buffer.offer("B"));
|
||||
assertTrue(this.buffer.offer("C"));
|
||||
assertEquals(3, this.buffer.size());
|
||||
assertTrue(this.buffer.isFull());
|
||||
|
||||
// Overwrite oldest
|
||||
assertTrue(this.buffer.offer("D"));
|
||||
assertEquals(3, this.buffer.size());
|
||||
assertEquals("B", this.buffer.peek());
|
||||
assertEquals("B", this.buffer.get(0));
|
||||
assertEquals("C", this.buffer.get(1));
|
||||
assertEquals("D", this.buffer.get(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testOfferNull() {
|
||||
assertThrows(NullPointerException.class, () -> this.buffer.offer(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testPoll() {
|
||||
assertNull(this.buffer.poll());
|
||||
|
||||
this.buffer.offer("A");
|
||||
this.buffer.offer("B");
|
||||
|
||||
assertEquals("A", this.buffer.poll());
|
||||
assertEquals(1, this.buffer.size());
|
||||
assertEquals("B", this.buffer.peek());
|
||||
|
||||
assertEquals("B", this.buffer.poll());
|
||||
assertEquals(0, this.buffer.size());
|
||||
assertNull(this.buffer.poll());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testPeek() {
|
||||
assertNull(this.buffer.peek());
|
||||
|
||||
this.buffer.offer("A");
|
||||
assertEquals("A", this.buffer.peek());
|
||||
assertEquals(1, this.buffer.size());
|
||||
|
||||
this.buffer.offer("B");
|
||||
assertEquals("A", this.buffer.peek());
|
||||
assertEquals(2, this.buffer.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGet() {
|
||||
this.buffer.offer("A");
|
||||
this.buffer.offer("B");
|
||||
this.buffer.offer("C");
|
||||
|
||||
assertEquals("A", this.buffer.get(0));
|
||||
assertEquals("B", this.buffer.get(1));
|
||||
assertEquals("C", this.buffer.get(2));
|
||||
|
||||
assertThrows(IndexOutOfBoundsException.class, () -> this.buffer.get(-1));
|
||||
assertThrows(IndexOutOfBoundsException.class, () -> this.buffer.get(3));
|
||||
|
||||
this.buffer.offer("D"); // Overwrites A
|
||||
assertEquals("B", this.buffer.get(0));
|
||||
assertEquals("C", this.buffer.get(1));
|
||||
assertEquals("D", this.buffer.get(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testClear() {
|
||||
this.buffer.offer("A");
|
||||
this.buffer.offer("B");
|
||||
this.buffer.clear();
|
||||
|
||||
assertEquals(0, this.buffer.size());
|
||||
assertNull(this.buffer.peek());
|
||||
assertFalse(this.buffer.isFull());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testIterator() {
|
||||
this.buffer.offer("A");
|
||||
this.buffer.offer("B");
|
||||
this.buffer.offer("C");
|
||||
this.buffer.offer("D"); // B, C, D
|
||||
|
||||
final Iterator<String> it = this.buffer.iterator();
|
||||
assertTrue(it.hasNext());
|
||||
assertEquals("B", it.next());
|
||||
assertTrue(it.hasNext());
|
||||
assertEquals("C", it.next());
|
||||
assertTrue(it.hasNext());
|
||||
assertEquals("D", it.next());
|
||||
assertFalse(it.hasNext());
|
||||
assertThrows(NoSuchElementException.class, it::next);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testIteratorRemoveUnsupported() {
|
||||
this.buffer.offer("A");
|
||||
final Iterator<String> it = this.buffer.iterator();
|
||||
assertThrows(UnsupportedOperationException.class, it::remove);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user