import static org.junit.Assert.*; import java.util.Arrays; import java.util.List; import java.util.NoSuchElementException; import org.junit.After; import org.junit.Before; import org.junit.Test; public class QuizTest { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } private BinaryTree constructFromPreorder(boolean linkedTree, List preorder) { if (linkedTree) return LinkedBinaryTree.createFromPreorder(preorder); else return SequentialBinaryTree.createFromPreorder(preorder); } @Test public void linkedTreeTestCreateFromPreorderAndBinarySearch() { testCreateFromPreorderAndBinarySearch(true); } @Test public void linkedTreeTestBinarySearchAndConstructPreorder() { testBinarySearchAndConstructPreorder(true); } @Test public void linkedTreeCreateFromAndBuildPreorder() { testCreateFromAndBuildPreorder(true); } @Test public void linkedTreeBinaryTreeSearch() { testBinaryTreeSearch(true); } @Test public void sequentialTreeTestCreateFromPreorderAndBinarySearch() { testCreateFromPreorderAndBinarySearch(false); } @Test public void sequentialTreeTestBinarySearchAndConstructPreorder() { testBinarySearchAndConstructPreorder(false); } @Test public void sequentialTreeCreateFromAndBuildPreorder() { testCreateFromAndBuildPreorder(false); } @Test public void sequentialTreeBinaryTreeSearch() { testBinaryTreeSearch(false); } public void testCreateFromPreorderAndBinarySearch(boolean linkedTree) { List preorder = Arrays.asList("Is it a mammal?", "Is it bigger than a tiger?", "Elephant", "Mouse", "Does it live underwater?", "Trout", "Robin"); BinaryTree tree = constructFromPreorder(linkedTree, preorder); BinaryTreeSearch search = tree.binaryTreeSearch(); assertEquals("Is it a mammal?", search.getData()); search.nextRightChild(); assertEquals("Does it live underwater?", search.getData()); search.nextRightChild(); assertEquals("Robin", search.getData()); } public void testBinarySearchAndConstructPreorder(boolean linkedTree) { BinaryTree tree = linkedTree ? new LinkedBinaryTree() : new SequentialBinaryTree(); BinaryTreeSearch search = tree.binaryTreeSearch(); search.setNode("Is it a mammal?", "d1", "d2"); search.nextLeftChild(); search.setNode("Is it bigger than a tiger?", "Elephant", "Mouse"); search = tree.binaryTreeSearch(); search.nextRightChild(); search.setNode("Does it live underwater?", "Trout", "Robin"); List preorder = Arrays.asList("Is it a mammal?", "Is it bigger than a tiger?", "Elephant", "Mouse", "Does it live underwater?", "Trout", "Robin"); assertEquals(preorder, tree.preorder()); } public void testCreateFromAndBuildPreorder(boolean linkedTree) { List preorder = Arrays.asList("Is it a mammal?", "Is it bigger than a tiger?", "Elephant", "Mouse", "Does it live underwater?", "Trout", "Robin"); BinaryTree tree = constructFromPreorder(linkedTree, preorder); assertEquals(preorder, tree.preorder()); } public void testBinaryTreeSearch(boolean linkedTree) { BinaryTree tree = linkedTree ? new LinkedBinaryTree() : new SequentialBinaryTree(); BinaryTreeSearch search = tree.binaryTreeSearch(); search.setNode(2, 5, 15); search.nextLeftChild(); search.setNode(5, -5, -8); search = tree.binaryTreeSearch(); search.nextRightChild(); search.setNode(15, 2, -5); search.nextLeftChild(); search.setNode(2, -20, -10); search = tree.binaryTreeSearch(); assertEquals(2, search.getData().intValue()); search.nextLeftChild(); assertEquals(5, search.getData().intValue()); search.nextRightChild(); assertEquals(-8, search.getData().intValue()); search = tree.binaryTreeSearch(); search.nextLeftChild(); search.nextRightChild(); try { search.nextLeftChild(); assertTrue("Expected NoSuchElementException!", false); } catch (NoSuchElementException e) { } } @Test public void quizTestLinkedRunSuccess() { testRunSuccess(true); } @Test public void quizTestSequentialRunSuccess() { testRunSuccess(false); } @Test public void quizTestLinkedRunLearn() { testRunLearn(true); } @Test public void quizTestSequentialRunLearn() { testRunLearn(false); } public void testRunSuccess(boolean linkedTree) { List preorder = Arrays.asList("Is it a mammal?", "Is it bigger than a tiger?", "elephant", "mouse", "Does it live underwater?", "trout", "robin"); UnitTestIoAdapter ioAdapter = new UnitTestIoAdapter(); Quiz quiz = new Quiz(constructFromPreorder(linkedTree, preorder), ioAdapter); ioAdapter.queueYesNoQuestion("a mammal"); ioAdapter.queueAnswer(true); ioAdapter.queueYesNoQuestion("bigger than a tiger"); ioAdapter.queueAnswer(true); ioAdapter.queueYesNoQuestion("elephant"); ioAdapter.queueAnswer(true); quiz.run(); } public void testRunLearn(boolean linkedTree) { List preorder = Arrays.asList("Is it a mammal?", "Is it bigger than a tiger?", "elephant", "mouse", "Does it live underwater?", "trout", "robin"); UnitTestIoAdapter ioAdapter = new UnitTestIoAdapter(); Quiz quiz = new Quiz(constructFromPreorder(linkedTree, preorder), ioAdapter); ioAdapter.queueYesNoQuestion("a mammal"); ioAdapter.queueAnswer(true); ioAdapter.queueYesNoQuestion("bigger than a tiger"); ioAdapter.queueAnswer(true); ioAdapter.queueYesNoQuestion("elephant"); ioAdapter.queueAnswer(false); ioAdapter.queueAnswer("whale"); ioAdapter.queueAnswer("Does it live underwater?"); ioAdapter.queueYesNoQuestion("?"); ioAdapter.queueAnswer(true); quiz.run(); // Next round ioAdapter.queueYesNoQuestion("a mammal"); ioAdapter.queueAnswer(true); ioAdapter.queueYesNoQuestion("bigger than a tiger"); ioAdapter.queueAnswer(true); ioAdapter.queueYesNoQuestion("underwater"); ioAdapter.queueAnswer(true); ioAdapter.queueYesNoQuestion("whale"); ioAdapter.queueAnswer(true); quiz.run(); } }