package net.glowstone.util.collection; import com.google.common.collect.ImmutableList; import org.junit.Assert; import org.junit.Test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Tests for {@link SuperList}, {@link SuperIterator} and {@link SuperListIterator}. */ public class SuperListAndIteratorTest { private static final int PARENT_COUNT = 3; private static final int ELEMENTS_PER_PARENT = 10; /** * Creates a new SuperList with PARENT_COUNT parents and PARENT_COUNT * ELEMENTS_PER_PARENT integers ranging from 0 to PARENT_COUNT * ELEMENTS_PER_PARENT - 1. */ private SuperList<Integer> generateTestList() { List<List<Integer>> lists = new ArrayList<>(); for (int listId = 0; listId < PARENT_COUNT; listId++) { List<Integer> list = new ArrayList<>(); for (int num = 0; num < ELEMENTS_PER_PARENT; num++) { list.add(listId * ELEMENTS_PER_PARENT + num); } lists.add(list); } return new SuperList<>(lists); } @Test public void sizeTest() { SuperList<Integer> list = generateTestList(); Assert.assertEquals("Parent count test failed", list.getParents().size(), PARENT_COUNT); Assert.assertEquals("Populated size test failed", PARENT_COUNT * ELEMENTS_PER_PARENT, list.size()); list.clear(); Assert.assertEquals("List couldn't be cleared", 0, list.size()); } @Test public void iterationTest() { Iterator<Integer> it = generateTestList().iterator(); for (int i = 0; i < PARENT_COUNT * ELEMENTS_PER_PARENT; i++) { Assert.assertEquals("Iterator hasNext returns false before reaching the end", true, it.hasNext()); Assert.assertEquals("Mismatch on position " + i, i, it.next().intValue()); } Assert.assertEquals("Iterator hasNext returns true after reaching the end", false, it.hasNext()); } @Test public void iteratorRemovalTest() { SuperList<Integer> list = generateTestList(); Iterator<Integer> it = list.iterator(); for (int i = 0; i < PARENT_COUNT * ELEMENTS_PER_PARENT; i++) { it.next(); it.remove(); Assert.assertEquals("Item at index " + i + " wasn't properly removed", PARENT_COUNT * ELEMENTS_PER_PARENT - i - 1, list.size()); } } @Test public void addTest() { List<Integer> parentList = new ArrayList<>(); List<Integer> superList = new SuperList<>(ImmutableList.of(parentList)); for (int i = 0; i < ELEMENTS_PER_PARENT; i++) { superList.add(i); } for (int i = 0; i < ELEMENTS_PER_PARENT; i++) { Assert.assertEquals("Could not add element " + i, superList.get(i).intValue(), i); } } }