Project2 0.1.3

Implementations of red black tree and AVL tree
Documentation
#![allow(non_snake_case)]
#[allow(unused_imports)]
use Project2::red_black_tree::RedBlackTree;

#[allow(unused_imports)]
use Project2::red_black_tree::NodeColor;

#[allow(unused_imports)]
use Project2::binary_tree::BinaryTree;

#[allow(unused_imports)]
use Project2::red_black_tree::Pointer;
use Project2::command_line_interface::CommandLineInterface;

#[allow(unused_imports)]
use Project2::avl_tree::AVLTree;

#[allow(unused_imports)]
use std::io::{stdin, stdout, Write};

#[allow(unused_imports)]
use std::str::FromStr;

#[allow(unused_imports)]
use std::env;


#[test]
fn test_rb_insert(){
    let mut rbtree = RedBlackTree::<u32>::new();

    rbtree.insert(50);
    rbtree.insert(25);
    rbtree.insert(15);
    rbtree.insert(35);
    rbtree.insert(75);
    rbtree.insert(60);
    rbtree.insert(90);

    let node50 = rbtree.get_node(50);
    let node25 = rbtree.get_node(25);
    let node15 = rbtree.get_node(15);
    let node35 = rbtree.get_node(35);
    let node75 = rbtree.get_node(75);
    let node60 = rbtree.get_node(60);
    let node90 = rbtree.get_node(90);

    assert_eq!(rbtree[node50].value, 50);
    assert_eq!(rbtree[node50].color, NodeColor::Red);
    assert_eq!(rbtree[node50].left, node35);
    assert_eq!(rbtree[node50].right, node75);
    assert_eq!(rbtree[node50].parent, node25);

    assert_eq!(rbtree[node25].value, 25);
    assert_eq!(rbtree[node25].color, NodeColor::Black);
    assert_eq!(rbtree[node25].left, node15);
    assert_eq!(rbtree[node25].right, node50);
    assert_eq!(rbtree[node25].parent, Pointer::null());

    assert_eq!(rbtree[node15].value, 15);
    assert_eq!(rbtree[node15].color, NodeColor::Black);
    assert_eq!(rbtree[node15].left, Pointer::null());
    assert_eq!(rbtree[node15].right, Pointer::null());
    assert_eq!(rbtree[node15].parent, node25);

    assert_eq!(rbtree[node35].value, 35);
    assert_eq!(rbtree[node35].color, NodeColor::Black);
    assert_eq!(rbtree[node35].left, Pointer::null());
    assert_eq!(rbtree[node35].right, Pointer::null());
    assert_eq!(rbtree[node35].parent, node50);

    assert_eq!(rbtree[node75].value, 75);
    assert_eq!(rbtree[node75].color, NodeColor::Black);
    assert_eq!(rbtree[node75].left, node60);
    assert_eq!(rbtree[node75].right, node90);
    assert_eq!(rbtree[node75].parent, node50);

    assert_eq!(rbtree[node60].value, 60);
    assert_eq!(rbtree[node60].color, NodeColor::Red);
    assert_eq!(rbtree[node60].left, Pointer::null());
    assert_eq!(rbtree[node60].right, Pointer::null());
    assert_eq!(rbtree[node60].parent, node75);

    assert_eq!(rbtree[node90].value, 90);
    assert_eq!(rbtree[node90].color, NodeColor::Red);
    assert_eq!(rbtree[node90].left, Pointer::null());
    assert_eq!(rbtree[node90].right, Pointer::null());
    assert_eq!(rbtree[node90].parent, node75);
}

#[test]
fn test_rb_delete(){
    let mut rbtree = RedBlackTree::<u32>::new();

    rbtree.insert(50);
    rbtree.insert(25);
    rbtree.insert(15);
    rbtree.insert(35);
    rbtree.insert(75);
    rbtree.insert(60);
    rbtree.insert(90);

    rbtree.delete(50);
    

    let node25 = rbtree.get_node(25);
    let node15 = rbtree.get_node(15);
    let node35 = rbtree.get_node(35);
    let node75 = rbtree.get_node(75);
    let node60 = rbtree.get_node(60);
    let node90 = rbtree.get_node(90);

    assert_eq!(rbtree[node25].value, 25);
    assert_eq!(rbtree[node25].color, NodeColor::Black);
    assert_eq!(rbtree[node25].left, node15);
    assert_eq!(rbtree[node25].right, node60);
    assert_eq!(rbtree[node25].parent, Pointer::null());

    assert_eq!(rbtree[node15].value, 15);
    assert_eq!(rbtree[node15].color, NodeColor::Black);
    assert_eq!(rbtree[node15].left, Pointer::null());
    assert_eq!(rbtree[node15].right, Pointer::null());
    assert_eq!(rbtree[node15].parent, node25);

    assert_eq!(rbtree[node35].value, 35);
    assert_eq!(rbtree[node35].color, NodeColor::Black);
    assert_eq!(rbtree[node35].left, Pointer::null());
    assert_eq!(rbtree[node35].right, Pointer::null());
    assert_eq!(rbtree[node35].parent, node60);

    assert_eq!(rbtree[node75].value, 75);
    assert_eq!(rbtree[node75].color, NodeColor::Black);
    assert_eq!(rbtree[node75].left, Pointer::null());
    assert_eq!(rbtree[node75].right, node90);
    assert_eq!(rbtree[node75].parent, node60);

    assert_eq!(rbtree[node60].value, 60);
    assert_eq!(rbtree[node60].color, NodeColor::Red);
    assert_eq!(rbtree[node60].left, node35);
    assert_eq!(rbtree[node60].right, node75);
    assert_eq!(rbtree[node60].parent, node25);

    assert_eq!(rbtree[node90].value, 90);
    assert_eq!(rbtree[node90].color, NodeColor::Red);
    assert_eq!(rbtree[node90].left, Pointer::null());
    assert_eq!(rbtree[node90].right, Pointer::null());
    assert_eq!(rbtree[node90].parent, node75);
}

#[test]
fn test_rb_get_node(){
    let mut rbtree = RedBlackTree::<u32>::new();

    rbtree.insert(50);
    rbtree.insert(25);
    rbtree.insert(15);
    rbtree.insert(35);
    rbtree.insert(75);
    rbtree.insert(60);
    rbtree.insert(90);

    assert_eq!(rbtree[rbtree.get_node(75)].value, 75);
    assert_eq!(rbtree[rbtree.get_node(50)].value, 50);
    assert_eq!(rbtree[rbtree.get_node(90)].value, 90);

}

#[test]
fn test_rb_empty(){
    let mut rbtree = RedBlackTree::<u32>::new();
    assert_eq!(rbtree.is_empty(), true);
    rbtree.insert(50);
    assert_eq!(rbtree.is_empty(), false);
}

# [test]
fn test_rb_height(){
    let mut rbtree = RedBlackTree::<u32>::new();

    rbtree.insert(50);
    rbtree.insert(25);
    rbtree.insert(15);
    rbtree.insert(35);
    rbtree.insert(75);
    rbtree.insert(60);
    rbtree.insert(90);
    assert_eq!(rbtree.get_height(), 4)
}

#[test]
fn simple_avl_insert(){
    let mut avltree = AVLTree::<u32>::new();
    avltree.insert(1);
    avltree.insert(2);
    avltree.insert(3);
    assert_eq!(avltree[avltree.root].value, 2);
}

# [test]
fn test_rb_count_leafs(){
    let rbtree = RedBlackTree::<u32>::new();
    assert_eq!(rbtree.count_leaf_nodes(), 0);

    let mut avltree = AVLTree::<u32>::new();
    avltree.insert(3);
    avltree.insert(2);
    avltree.insert(1);
    assert_eq!(avltree[avltree.root].value, 2);
}

#[test]
fn avl_rebalance(){
    let mut avltree = AVLTree::<u32>::new();
    avltree.insert(1);
    avltree.insert(2);
    avltree.insert(3);
    avltree.insert(4);
    avltree.insert(5);
    avltree.insert(6);
    avltree.insert(7);
    assert_eq!(avltree.get_height(), 3);
    avltree.insert(8);
    assert_eq!(avltree.get_height(), 4);
}

#[test]
fn avl_delete(){
    let mut avltree = AVLTree::<u32>::new();
    avltree.insert(1);
    avltree.insert(2);
    avltree.insert(3);
    avltree.insert(4);
    avltree.insert(5);
    avltree.insert(6);
    avltree.insert(7);
    avltree.delete(5);
    avltree.delete(6);
    avltree.delete(7);
    avltree.delete(3);
    assert_eq!(avltree.get_height(), 2);
}


fn main() {
    let command_line_interface = CommandLineInterface{};
    command_line_interface.run();
}