package org.molgenis.util; import com.google.common.collect.Iterators; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.IOException; import java.util.*; import java.util.stream.IntStream; import static org.testng.Assert.*; public class HugeSetTest { private HugeSet<String> hugeSet; @BeforeMethod public void beforeMethod() { hugeSet = new HugeSet<String>(); } @AfterMethod public void afterMethod() throws IOException { hugeSet.close(); } @Test public void add() { hugeSet.add("test"); assertEquals(hugeSet.size(), 1); } @Test public void addLarge() { fillToThreshold(); assertEquals(hugeSet.size(), HugeSet.THRESHOLD); } @Test public void clear() { List<String> contents = Arrays.asList("test1", "test2", "test3"); hugeSet.addAll(contents); hugeSet.clear(); assertTrue(hugeSet.isEmpty()); } @Test public void clearLarge() { fillToThreshold(); hugeSet.clear(); assertTrue(hugeSet.isEmpty()); } @Test public void contains() { List<String> contents = Arrays.asList("test1", "test2", "test3"); hugeSet.addAll(contents); assertTrue(hugeSet.contains("test2")); assertFalse(hugeSet.contains("test4")); } @Test public void containsLarge() { fillToThreshold(); assertTrue(hugeSet.contains("2")); assertFalse(hugeSet.contains("test")); } @Test public void containsAll() { List<String> contents = Arrays.asList("test1", "test2", "test3"); hugeSet.addAll(contents); assertTrue(hugeSet.containsAll(contents)); } @Test public void containsAllLarge() { fillToThreshold(); Set<String> contents = new HashSet<>(); IntStream.range(0, HugeSet.THRESHOLD).mapToObj(Integer::toString).forEach(contents::add); assertTrue(hugeSet.containsAll(contents)); } @Test public void iterator() { List<String> contents = Arrays.asList("test1", "test2", "test3"); hugeSet.addAll(contents); Iterator<String> it = hugeSet.iterator(); assertEquals(Iterators.size(it), contents.size()); for (String s : hugeSet) { assertTrue(contents.contains(s)); } } @Test public void iteratorLarge() { fillToThreshold(); Set<String> contents = new HashSet<>(); IntStream.range(0, HugeSet.THRESHOLD).mapToObj(Integer::toString).forEach(contents::add); Iterator<String> it = hugeSet.iterator(); assertEquals(Iterators.size(it), contents.size()); for (String s : hugeSet) { assertTrue(contents.contains(s)); } } @Test public void remove() { List<String> contents = Arrays.asList("test1", "test2", "test3"); hugeSet.addAll(contents); hugeSet.remove("test1"); assertEquals(hugeSet.size(), 2); } @Test public void removeLarge() { fillToThreshold(); hugeSet.remove("1"); assertEquals(hugeSet.size(), HugeSet.THRESHOLD - 1); } @Test public void removeAll() { List<String> contents = Arrays.asList("test1", "test2", "test3"); hugeSet.addAll(contents); hugeSet.removeAll(contents); assertEquals(hugeSet.size(), 0); } @Test public void removeAllLarge() { fillToThreshold(); Set<String> contents = new HashSet<>(); IntStream.range(0, HugeSet.THRESHOLD).mapToObj(Integer::toString).forEach(contents::add); hugeSet.removeAll(contents); assertEquals(hugeSet.size(), 0); } @Test public void retainAll() { List<String> contents = Arrays.asList("test1", "test2", "test3"); hugeSet.addAll(contents); hugeSet.retainAll(Arrays.asList("test2", "test3")); assertEquals(hugeSet.size(), 2); } @Test public void retainAllLarge() { fillToThreshold(); hugeSet.retainAll(Arrays.asList("2", "3")); assertEquals(hugeSet.size(), 2); } @Test public void toArray() { List<String> contents = Arrays.asList("test1", "test2", "test3"); hugeSet.addAll(contents); assertEquals(hugeSet.toArray().length, 3); } @Test public void toArrayLarge() { fillToThreshold(); assertEquals(hugeSet.toArray().length, HugeSet.THRESHOLD); } private void fillToThreshold() { IntStream.range(0, HugeSet.THRESHOLD).mapToObj(Integer::toString).forEach(hugeSet::add); } }