package de.jungblut.online.stream;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import org.junit.Assert;
import org.junit.Test;
public class TestShuffledIterator {
@Test
public void testLessItemsThanBufferSpace() {
ShuffledIterator<Integer> it = new ShuffledIterator<>(streamHundredItems(),
1000);
assertStreamContainsAllItems(it.asStream());
}
@Test
public void testMoreItemsThanBufferSpace() {
ShuffledIterator<Integer> it = new ShuffledIterator<>(streamHundredItems(),
10);
assertStreamContainsAllItems(it.asStream());
}
// try to fuzz some off-by-one errors
@Test
public void testFuzzyInputEdgeConditions() {
for (int i = 96; i < 105; i++) {
ShuffledIterator<Integer> it = new ShuffledIterator<>(
streamHundredItems(), i);
assertStreamContainsAllItems(it.asStream());
}
}
public void assertStreamContainsAllItems(Stream<Integer> stream) {
List<Integer> collected = stream.collect(Collectors.toList());
// assert uniqueness and integrity
Assert.assertEquals(100, collected.size());
HashSet<Integer> set = new HashSet<>(collected);
Assert.assertEquals(100, set.size());
for (int i = 0; i < 100; i++) {
Assert.assertTrue("set didn't contain " + i, set.contains(i));
}
}
public Stream<Integer> streamHundredItems() {
return IntStream.range(0, 100).boxed();
}
}