とりあえず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());
	}
}