import java.util.Arrays; import java.util.Collections; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.junit.Ignore; import org.junit.Test; public class BSTTest { @Test public void dataIsRetained() { BST<Integer> sut = new BST(); final int actual = 4; sut.insert(actual); final BST.Node<Integer> root = sut.getRoot(); assertNotNull(root); final int expected = root.getData(); assertEquals(expected, actual); } @Test @Ignore("Remove to run test") public void insertsLess() { BST<Integer> sut = new BST(); final int expectedRoot = 4; final int expectedLeft = 2; sut.insert(expectedRoot); sut.insert(expectedLeft); final BST.Node<Integer> root = sut.getRoot(); assertNotNull(root); final BST.Node<Integer> left = root.getLeft(); assertNotNull(left); final int actualRoot = root.getData(); final int actualLeft = left.getData(); assertEquals(expectedLeft, actualLeft); assertEquals(expectedRoot, actualRoot); } @Test @Ignore("Remove to run test") public void insertsSame() { BST<Integer> sut = new BST(); final int expectedRoot = 4; final int expectedLeft = 4; sut.insert(expectedRoot); sut.insert(expectedLeft); final BST.Node<Integer> root = sut.getRoot(); assertNotNull(root); final BST.Node<Integer> left = root.getLeft(); assertNotNull(left); final int actualRoot = root.getData(); final int actualLeft = left.getData(); assertEquals(expectedLeft, actualLeft); assertEquals(expectedRoot, actualRoot); } @Test @Ignore("Remove to run test") public void insertsRight() { BST<Integer> sut = new BST(); final int expectedRoot = 4; final int expectedRight = 5; sut.insert(expectedRoot); sut.insert(expectedRight); final BST.Node<Integer> root = sut.getRoot(); assertNotNull(root); final BST.Node<Integer> right = root.getRight(); assertNotNull(right); final int actualRoot = root.getData(); final int actualRight = right.getData(); assertEquals(expectedRight, actualRight); assertEquals(expectedRoot, actualRoot); } @Test @Ignore("Remove to run test") public void createsComplexTree() { BST<Integer> sut = new BST<>(); List<Integer> expected = Collections.unmodifiableList( Arrays.asList(4, 2, 6, 1, 3, 5, 7) ); List<Integer> treeData = Collections.unmodifiableList( Arrays.asList(4, 2, 6, 1, 3, 7, 5) ); treeData.forEach(sut::insert); List<Integer> actual = sut.getAsLevelOrderList(); assertEquals(expected, actual); } @Test @Ignore("Remove to run test") public void sortsSingleElement() { BST<Integer> sut = new BST<>(); List<Integer> expected = Collections.unmodifiableList( Collections.singletonList(4) ); sut.insert(4); List<Integer> actual = sut.getAsSortedList(); assertEquals(expected, actual); } @Test @Ignore("Remove to run test") public void sortsCollectionOfTwoIfSecondInsertedIsSmallerThanFirst() { BST<Integer> sut = new BST<>(); List<Integer> expected = Collections.unmodifiableList( Arrays.asList(2, 4) ); sut.insert(4); sut.insert(2); List<Integer> actual = sut.getAsSortedList(); assertEquals(expected, actual); } @Test @Ignore("Remove to run test") public void sortsCollectionOfTwoIfSecondInsertedIsBiggerThanFirst() { BST<Integer> sut = new BST<>(); List<Integer> expected = Collections.unmodifiableList( Arrays.asList(4, 5) ); sut.insert(4); sut.insert(5); List<Integer> actual = sut.getAsSortedList(); assertEquals(expected, actual); } @Test @Ignore("Remove to run test") public void iteratesOverComplexTree() { BST<Integer> sut = new BST<>(); List<Integer> expected = Collections.unmodifiableList( Arrays.asList(1, 2, 3, 4, 5, 6, 7) ); List<Integer> treeData = Collections.unmodifiableList( Arrays.asList(4, 2, 1, 3, 6, 7, 5) ); treeData.forEach(sut::insert); List<Integer> actual = sut.getAsSortedList(); assertEquals(expected, actual); } }