とりあえずTDDペアプロで作った成果物をあげてみるよ
ペア組んだ陣内さん、どうもありがとうございました。
src/pq/Priority.java
package pq; public enum Priority { HIGH, LOW, NORMAL, }
src/pq/PriorityQueue.java
package pq; import java.util.LinkedList; import java.util.Queue; public class PriorityQueue { private final Queue<Object> queue1 = new LinkedList<Object>(); private final Queue<Object> queue2 = new LinkedList<Object>(); private final Queue<Object> queue3 = new LinkedList<Object>(); public void add(Object object) { add(object, Priority.NORMAL); } public Object poll() { if (queue3.size() != 0) { return queue3.poll(); } else if (queue2.size() != 0) { return queue2.poll(); } else { return queue1.poll(); } } public void add(Object object, Priority priority) { switch (priority) { case HIGH: queue3.add(object); break; case NORMAL: queue2.add(object); break; case LOW: queue1.add(object); break; } } }
test/pq/PriorityQueueTest.java
package pq; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; public class ProprotyQueueTest { private PriorityQueue q; @Before public void setUp() throws Exception { q = new PriorityQueue(); } @Test public void オブジェクトを1つ出し入れできること() throws Exception { q.add("foo"); assertEquals("foo", q.poll()); } @Test public void オブジェクトを2つ出し入れできること() throws Exception { q.add("foo1"); q.add("foo2"); assertEquals("foo1", q.poll()); assertEquals("foo2", q.poll()); } @Test public void 優先度enumつきでオブジェクトを1つ出し入れできること() throws Exception { q.add("foo3", Priority.HIGH); assertEquals("foo3", q.poll()); } @Test public void 優先度Priority_HIGHがPriority_LOWを追い越すこと() throws Exception { q.add("foo4", Priority.LOW); q.add("foo5", Priority.HIGH); assertEquals("foo5", q.poll()); assertEquals("foo4", q.poll()); } @Test public void HIGHとNORMALとLOWが混在しても優先度順にpollできること() throws Exception { q.add("bar1", Priority.LOW); q.add("bar2", Priority.HIGH); q.add("bar3", Priority.NORMAL); assertEquals("bar2", q.poll()); assertEquals("bar3", q.poll()); assertEquals("bar1", q.poll()); } @Test public void 引数なしaddは優先度NORMALのaddと等価であること() throws Exception { q.add("bar1", Priority.LOW); q.add("bar2", Priority.HIGH); q.add("bar3"); assertEquals("bar2", q.poll()); assertEquals("bar3", q.poll()); assertEquals("bar1", q.poll()); } }