import org.junit.Assert;
import org.junit.Test;
import java.util.Collections;
import java.util.List;
import java.util.stream.IntStream;
public class QueueWithMaxTest {
private final int N = 5;
private int length;
@Test
public void queueWithMax1() {
length = 10;
test(length);
}
@Test
public void queueWithMax2() {
length = 100;
test(length);
}
@Test
public void queueWithMax3() {
length = 1000;
test(length);
}
private void test(int length) {
List<Integer> values = StreamUtil.sequence(length);
final Integer max = Collections.max(values);
assertTracksMax(values);
IntStream.range(0, N)
.forEach(n -> {
Collections.shuffle(values);
QueueWithMax queue = createQueue(values);
Assert.assertEquals(max, queue.max());
});
}
private void assertTracksMax(List<Integer> values) {
final QueueWithMax queue = new QueueWithMax();
StreamUtil.revRange(0, values.size()).forEach(
i -> {
queue.enqueue(values.get(i));
}
);
StreamUtil.revRange(0, values.size()).forEach(
i -> {
Assert.assertEquals(values.get(i), queue.dequeue());
}
);
}
private QueueWithMax createQueue(List<Integer> values) {
final QueueWithMax queue = new QueueWithMax();
IntStream.range(0, values.size())
.forEach(i ->
{
queue.enqueue(values.get(i));
});
return queue;
}
}