package io.lumify.core.util;
import org.junit.Test;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.assertEquals;
public class FixedSizeCircularLinkedListTest {
@Test
public void setupAndToString() {
int size = 5;
FixedSizeCircularLinkedList<AtomicInteger> list = new FixedSizeCircularLinkedList<AtomicInteger>(size, AtomicInteger.class);
assertEquals("0:0,1:0,2:0,3:0,4:0", list.toString());
}
@Test
public void set() {
int size = 5;
FixedSizeCircularLinkedList<AtomicInteger> list = new FixedSizeCircularLinkedList<AtomicInteger>(size, AtomicInteger.class);
for (int i = 0; i < size; i++) {
list.head().set(i);
list.rotateForward();
}
for (int i = 0; i < size; i++) {
assertEquals(i, list.head().get());
list.rotateForward();
}
}
@Test
public void increment() {
int size = 5;
FixedSizeCircularLinkedList<AtomicInteger> list = new FixedSizeCircularLinkedList<AtomicInteger>(size, AtomicInteger.class);
for (int i = 0; i < size; i++) {
for (int j = 0; j < i; j++) {
list.head().incrementAndGet();
}
list.rotateForward();
}
for (int i = 0; i < size; i++) {
assertEquals(i, list.head().get());
list.rotateForward();
}
}
@Test
public void circularity() {
int size = 5;
FixedSizeCircularLinkedList<AtomicInteger> list = new FixedSizeCircularLinkedList<AtomicInteger>(size, AtomicInteger.class);
for (int i = 0; i < size; i++) {
list.head().set(i);
list.rotateForward();
}
for (int i = 0; i < size * 2; i++) {
assertEquals(i % size, list.head().get());
list.rotateForward();
}
}
@Test
public void readBackward() {
int size = 16;
FixedSizeCircularLinkedList<AtomicInteger> list = new FixedSizeCircularLinkedList<AtomicInteger>(size, AtomicInteger.class);
for (int i = 0; i < size; i++) {
list.head().set(i);
list.rotateForward();
}
// one
assertEquals(15, list.readBackward(1).get(0).get());
// five
List<AtomicInteger> five = list.readBackward(5);
int sumOfFive = 0;
for (int i = 0; i < 5; i++) {
sumOfFive += five.get(i).get();
}
assertEquals(65, sumOfFive);
// fifteen
List<AtomicInteger> fifteen = list.readBackward(15);
int sumOfFifteen = 0;
for (int i = 0; i < 15; i++) {
sumOfFifteen += fifteen.get(i).get();
}
assertEquals(120, sumOfFifteen);
}
}