package com.limegroup.gnutella.util;
import java.util.Iterator;
import java.util.NoSuchElementException;
import junit.framework.Test;
public class FixedsizePriorityQueueTest extends com.limegroup.gnutella.util.BaseTestCase {
private final Integer one=new Integer(1);
private final Integer two=new Integer(2);
private final Integer three=new Integer(3);
private final Integer four=new Integer(4);
private final Integer five=new Integer(5);
private final Integer six=new Integer(6);
/**
* The default queue for testing, with a capacity of 4 and the elements 2,
* 3, and 4.
* @see setUp.
*/
private FixedsizePriorityQueue q;
public FixedsizePriorityQueueTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(FixedsizePriorityQueueTest.class);
}
public void setUp() {
FixedsizePriorityQueue.DEBUG=true;
q=new FixedsizePriorityQueue(Comparators.integerComparator(), 4);
assertNull(q.insert(three));
assertNull(q.insert(four));
assertNull(q.insert(two));
}
public void testSize() {
assertEquals(3, q.size());
}
public void testCapacity() {
assertEquals(4, q.capacity());
}
public void testMin() {
assertEquals(two, q.getMin());
q=new FixedsizePriorityQueue(Comparators.integerComparator(), 4);
try {
q.getMin();
fail("No no such element exception");
} catch (NoSuchElementException e) { }
}
public void testMax() {
assertEquals(four, q.getMax());
q=new FixedsizePriorityQueue(Comparators.integerComparator(), 4);
try {
q.getMax();
fail("No no such element exception");
} catch (NoSuchElementException e) { }
}
public void testContains() {
assertTrue(! q.contains(one));
assertTrue(q.contains(two));
assertTrue(q.contains(three));
assertTrue(q.contains(four));
assertTrue(! q.contains(five));
}
public void testIterator() {
Iterator iter=q.iterator();
assertEquals(two, iter.next());
assertEquals(three, iter.next());
assertEquals(four, iter.next());
assertTrue(!iter.hasNext());
}
public void testInsert() {
//Three basic cases in the insert code:
//a) no elements removed
assertNull(q.insert(five)); //2, 3, 4, 5
Iterator iter=q.iterator();
assertEquals(two, iter.next());
assertEquals(three, iter.next());
assertEquals(four, iter.next());
assertEquals(five, iter.next());
assertTrue(! iter.hasNext());
//c) this element removed (i.e., this not added)
assertEquals(one, q.insert(one)); //2, 3, 4, 5 (case c)
iter=q.iterator();
assertEquals(two, iter.next());
assertEquals(three, iter.next());
assertEquals(four, iter.next());
assertEquals(five, iter.next());
assertTrue(! iter.hasNext());
//b) smallest element removed
assertEquals(two, q.insert(six)); //3, 4, 5, 6 (case b)
iter=q.iterator();
assertEquals(three, iter.next());
assertEquals(four, iter.next());
assertEquals(five, iter.next());
assertEquals(six, iter.next());
assertTrue(! iter.hasNext());
//Test duplicates
assertEquals(three, q.insert(six)); //4, 5, 6, 6
assertEquals(four, q.insert(six)); //5, 6, 6, 6
assertEquals(five, q.insert(six)); //6, 6, 6, 6
iter=q.iterator();
assertEquals(six, iter.next());
assertEquals(six, iter.next());
assertEquals(six, iter.next());
assertEquals(six, iter.next());
assertTrue(! iter.hasNext());
}
public void testRemoveNotFound() {
assertTrue(! q.remove(five));
Iterator iter=q.iterator();
assertEquals(two, iter.next());
assertEquals(three, iter.next());
assertEquals(four, iter.next());
assertTrue(!iter.hasNext());
}
public void testRemoveFound() {
assertTrue(q.remove(three));
Iterator iter=q.iterator();
assertEquals(two, iter.next());
assertEquals(four, iter.next());
assertTrue(!iter.hasNext());
}
public void testRemoveFoundOne() {
assertNull(q.insert(two)); //2, 2, 3, 4
assertTrue(q.remove(two));
Iterator iter=q.iterator();
assertEquals(two, iter.next());
assertEquals(three, iter.next());
assertEquals(four, iter.next());
assertTrue(!iter.hasNext());
}
/*
public void testPerformance() {
int SIZE=1000;
Integer[] numbers=new Integer[100000];
java.util.Random rand=new java.util.Random();
for (int i=0; i<numbers.length; i++)
numbers[i]=new MyInteger(rand.nextInt());
BinaryHeap q1=new BinaryHeap(SIZE);
long start=System.currentTimeMillis();
for (int i=0; i<numbers.length; i++)
q1.insert(numbers[i]);
long stop=System.currentTimeMillis();
System.out.println("Elapsed time for BinaryHeap: "
+(stop-start));
FixedsizePriorityQueue q2=new FixedsizePriorityQueue(SIZE);
start=System.currentTimeMillis();
for (int i=0; i<numbers.length; i++)
q2.insert(numbers[i], numbers[i].getInt());
stop=System.currentTimeMillis();
System.out.println("Elapsed time for FixedSizePriorityQueue: "
+(stop-start));
assertEquals(q2.getMax(), q1.getMax());
}
*/
}