Skip to content
Snippets Groups Projects
RedBlackTreeTest.java 3.79 KiB
Newer Older
  • Learn to ignore specific revisions
  • Haley Glavina's avatar
    Haley Glavina committed
    /**
     * 
     */
    package search;
    
    import static org.junit.Assert.*;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    /**
     * @author HaleyGlavina
     *
     */
    public class RedBlackTreeTest {
    	
    	private GeneralCompare<Integer> b1;
    	private Field<Integer, Integer[]> fld;
    
    	/**
    	 * @throws java.lang.Exception
    	 */
    	@Before
    	public void setUp() throws Exception {
    		b1 = (a1, a2) -> (Integer) a1 - (Integer) a2;
    		fld = (a1) -> (Integer) a1[0];
    	}
    
    	/**
    	 * @throws java.lang.Exception
    	 */
    	@After
    	public void tearDown() throws Exception {
    	}
    
    	/**
    	 * Test method for {@link search.RedBlackTree#root()}.
    	 */
    	@Test
    	public void testRoot() {
    		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9}};
    		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
    		
    		// Add first 5 nodes, expected root is 2
    		for(int i = 0; i < 4; i++){
    			myTree.put(x[i]);
    		}
    		assert((Integer) myTree.root().key() == 2);
    		
    		// Add remaining nodes, expected root is 4
    		for(int i = 5; i < x.length; i++){
    			myTree.put(x[i]);
    		}
    		assert((Integer) myTree.root().key() == 4);
    	}
    
    	
    	/**
    	 * Test method for {@link search.RedBlackTree#get(Node<Key, Value> node, Comparable<Key> key)}.
    	 */
    	@Test
    	public void testGet() {
    		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9}};
    		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
    		
    		// Add first 5 nodes, expected get(6) result is null
    		for(int i = 0; i < 4; i++){
    			myTree.put(x[i]);
    		}
    
    		assert(myTree.get(6) == null);
    
    		
    		// Add remaining nodes, expected get(6) result is {6, 6} 
    		for(int i = 5; i < x.length; i++){
    			myTree.put(x[i]);
    		}
    
    		assert(myTree.get(6).key() == 6);
    
    		// ==== TESTING WEIRD VALUES ==== //
    		Integer[][] y = {{100, 1}, {200000, 2}, {-3, 3}, {45, 4}, {-125, 2}};
    		RedBlackTree<Integer, Integer[]> newTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
    		
    		for(int i = 0; i < 5; i++){
    			newTree.put(y[i]);
    		}
    		assert(newTree.get(6) == null);
    		assert(newTree.get(-3).key() == (-3));
    		assert(newTree.get(100).key() == 100);
    		assert(newTree.get(-125).key() == (-125));
    		assert(newTree.get(200000).key() == 200000);
    
    Haley Glavina's avatar
    Haley Glavina committed
    
    	/**
    	 * Test method for {@link search.RedBlackTree#put(java.lang.Object)}.
    	 */
    	@Test
    	public void testPut() {
    		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}, {6, 6}, {7, 7}, {8, 8}, {9, 9}};
    		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
    		for(int i = 0; i < x.length; i++){
    			myTree.put(x[i]);
    		}
    		Node h = myTree.root(); 
    		
    		// Check if right-most branch of tree matches what is expected
    		Integer[] expect = {4, 6, 7, 8, 9};
    		for (int i = 0 ; i < expect.length ; i++) {
    			assert(expect[i] == h.key());
    			h = h.right();
    		}
    	}
    
    	/**
    	 * Test method for {@link search.RedBlackTree#rotateLeft(search.Node)}.
    	 */
    	@Test
    	public void testRotateLeft() {
    		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
    		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}};
    		myTree.put(x[0]);
    		myTree.put(x[1]);
    		assert((Integer) myTree.root().key() == 1);
    		
    		// Check if left rotation changes the root of the tree as expected
    		myTree.put(x[2]);
    		myTree.put(x[3]);
    		assert((Integer) myTree.root().key() == 2);
    		
    	}
    
    	/**
    	 * Test method for {@link search.RedBlackTree#rotateRight(search.Node)}.
    	 */
    	@Test
    	public void testRotateRight() {
    		RedBlackTree<Integer, Integer[]> myTree = new RedBlackTree<Integer, Integer[]>(fld, b1);
    		Integer[][] x = {{1, 1}, {2, 2}, {3, 3}, {4, 4}};
    		myTree.put(x[3]);
    		myTree.put(x[2]);
    		assert((Integer) myTree.root().key() == 4);
    		
    		// Check if right rotation changes the root of the tree as expected
    		myTree.put(x[1]);
    		myTree.put(x[0]);
    		assert((Integer) myTree.root().key() == 3);
    	}
    
    }