package uk.ac.rhul.cs.cl1.support;
import junit.framework.Assert;
import org.junit.Test;
import uk.ac.rhul.cs.utils.Ordered;
public class OrderMaintainingQueueTest {
@Test
public void testAdditionInCorrectOrder() {
OrderMaintainingQueue<Integer> queue = new OrderMaintainingQueue<Integer>();
Assert.assertTrue(queue.isEmpty());
queue.add(new Ordered<Integer>(0, 100));
queue.add(new Ordered<Integer>(1, 200));
queue.add(new Ordered<Integer>(2, 300));
Assert.assertEquals(3, queue.size());
Assert.assertEquals(new Ordered<Integer>(0, 100), queue.remove());
Assert.assertEquals(new Ordered<Integer>(1, 200), queue.remove());
Assert.assertEquals(new Ordered<Integer>(2, 300), queue.remove());
Assert.assertTrue(queue.isEmpty());
}
@Test
public void testAdditionInReversedOrder() {
OrderMaintainingQueue<Integer> queue = new OrderMaintainingQueue<Integer>();
Assert.assertTrue(queue.isEmpty());
queue.add(new Ordered<Integer>(2, 300));
queue.add(new Ordered<Integer>(1, 200));
// size should still be zero here -- both items are pending
Assert.assertEquals(0, queue.size());
queue.add(new Ordered<Integer>(0, 100));
// size suddenly grows to three as all the pending items are now in the queue
Assert.assertEquals(3, queue.size());
// flush the queue
Assert.assertEquals(new Ordered<Integer>(0, 100), queue.remove());
Assert.assertEquals(new Ordered<Integer>(1, 200), queue.remove());
Assert.assertEquals(new Ordered<Integer>(2, 300), queue.remove());
Assert.assertTrue(queue.isEmpty());
}
}