package com.github.davidmoten.rtree.internal.util; import static com.github.davidmoten.rtree.internal.util.BoundedPriorityQueue.create; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Comparator; import org.junit.Test; import com.github.davidmoten.guavamini.Sets; import com.github.davidmoten.rtree.internal.util.BoundedPriorityQueue; public class BoundedPriorityQueueTest { private static final Comparator<Integer> comparator = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }; @Test public void emptyQueueAsListIsEmpty() { BoundedPriorityQueue<Integer> q = create(2, comparator); assertTrue(q.asList().isEmpty()); } @Test public void singleItemReturnsSingleItem() { BoundedPriorityQueue<Integer> q = create(2, comparator); q.add(1); assertEquals(Sets.newHashSet(1), Sets.newHashSet(q.asList())); } @Test public void twoItemsReturnsSingleItemWhenMaxIsOne() { BoundedPriorityQueue<Integer> q = create(1, comparator); q.add(1); q.add(2); assertEquals(Sets.newHashSet(1), Sets.newHashSet(q.asList())); } @Test public void twoItemsReturnsSingleItemWhenMaxIsOneInputOrderFlipped() { BoundedPriorityQueue<Integer> q = create(1, comparator); q.add(2); q.add(1); assertEquals(Sets.newHashSet(1), Sets.newHashSet(q.asList())); } @Test public void threeItemsReturnsTwoItemsWhenMaxIsOneInputOrderFlipped() { BoundedPriorityQueue<Integer> q = create(2, comparator); q.add(3); q.add(2); q.add(1); assertEquals(Sets.newHashSet(1, 2), Sets.newHashSet(q.asList())); } @Test public void threeItemsReturnsTwoItemsWhenMaxIsOneInputOrderIncreasing() { BoundedPriorityQueue<Integer> q = create(2, comparator); q.add(1); q.add(2); q.add(3); assertEquals(Sets.newHashSet(1, 2), Sets.newHashSet(q.asList())); } @Test public void threeItemsReturnsTwoItemsWhenMaxIsOneInputOrderMixed() { BoundedPriorityQueue<Integer> q = create(2, comparator); q.add(3); q.add(1); q.add(2); assertEquals(Sets.newHashSet(1, 2), Sets.newHashSet(q.asList())); } @Test public void threeItemsReturnsTwoItemsWhenMaxIsOneInputOrderMixed2() { BoundedPriorityQueue<Integer> q = create(2, comparator); q.add(1); q.add(3); q.add(2); assertEquals(Sets.newHashSet(1, 2), Sets.newHashSet(q.asList())); } @Test public void threeItemsReturnsThreeItemsWhenMaxIsOneInputOrderFlipped() { BoundedPriorityQueue<Integer> q = create(10, comparator); q.add(3); q.add(2); q.add(1); assertEquals(Sets.newHashSet(1, 2, 3), Sets.newHashSet(q.asList())); } @Test public void threeItemsReturnsThreeItemsWhenMaxIsOneInputOrderIncreasing() { BoundedPriorityQueue<Integer> q = create(10, comparator); q.add(1); q.add(2); q.add(3); assertEquals(Sets.newHashSet(1, 2, 3), Sets.newHashSet(q.asList())); } @Test public void threeItemsReturnsThreeItemsWhenMaxIsOneInputOrderMixed() { BoundedPriorityQueue<Integer> q = create(10, comparator); q.add(3); q.add(1); q.add(2); assertEquals(Sets.newHashSet(1, 2, 3), Sets.newHashSet(q.asList())); } @Test public void threeItemsReturnsThreeItemsWhenMaxIsOneInputOrderMixed2() { BoundedPriorityQueue<Integer> q = create(10, comparator); q.add(1); q.add(3); q.add(2); assertEquals(Sets.newHashSet(1, 2, 3), Sets.newHashSet(q.asList())); } @Test(expected=IllegalArgumentException.class) public void testInstantiateWithNegativeSizeThrowsIAE() { create(-1, comparator); } @Test(expected=IllegalArgumentException.class) public void testInstantiateWithZeroSizeThrowsIAE() { create(0, comparator); } @Test(expected=NullPointerException.class) public void testAddNullThrowsNPE() { BoundedPriorityQueue<Integer> q = create(10, comparator); q.add(null); } }