use crate::RBTree;
use super::KV32;
use crate::kv::Color::{BLACK, RED};
#[test]
fn test_delete_1() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
assert_eq!(false, tree.delete(&32));
assert_eq!("RBTree{size:1,tree:(B:64)}", tree.to_string());
}
#[test]
fn test_delete_2() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert(&KV32::same(32));
tree.insert(&KV32::same(96));
assert_eq!("RBTree{size:3,tree:((R:32),B:64,(R:96))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&32));
tree.validate();
assert_eq!("RBTree{size:2,tree:(B:64,(R:96))}", tree.to_string());
}
#[test]
fn test_delete_3() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 32, BLACK);
tree.insert_at(64, 96, BLACK);
tree.insert_at(32, 48, RED);
assert_eq!("RBTree{size:4,tree:((B:32,(R:48)),B:64,(B:96))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&32));
assert_eq!("RBTree{size:3,tree:((B:48),B:64,(B:96))}", tree.to_string());
tree.validate();
}
#[test]
fn test_delete_4() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
assert_eq!("RBTree{size:1,tree:(B:64)}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&64));
tree.validate();
assert_eq!("RBTree{size:0}", tree.to_string());
}
#[test]
fn test_delete_5_left() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 32, BLACK);
tree.insert_at(64, 96, RED);
tree.insert_at(96, 80, BLACK);
tree.insert_at(96, 112, BLACK);
assert_eq!("RBTree{size:5,tree:((B:32),B:64,((B:80),R:96,(B:112)))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&32));
assert_eq!("RBTree{size:4,tree:((B:64,(R:80)),B:96,(B:112))}", tree.to_string());
tree.validate();
}
#[test]
fn test_delete_5_right() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 96, BLACK);
tree.insert_at(64, 32, RED);
tree.insert_at(32, 48, BLACK);
tree.insert_at(32, 16, BLACK);
assert_eq!("RBTree{size:5,tree:(((B:16),R:32,(B:48)),B:64,(B:96))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&96));
assert_eq!("RBTree{size:4,tree:((B:16),B:32,((R:48),B:64))}", tree.to_string());
tree.validate();
}
#[test]
fn test_delete_6() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 32, BLACK);
tree.insert_at(64, 96, BLACK);
assert_eq!("RBTree{size:3,tree:((B:32),B:64,(B:96))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&32));
assert_eq!("RBTree{size:2,tree:(B:64,(R:96))}", tree.to_string());
tree.validate();
}
#[test]
fn test_delete_7() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 32, BLACK);
tree.insert_at(64, 96, BLACK);
tree.insert_at(32, 16, BLACK);
tree.insert_at(32, 48, BLACK);
tree.insert_at(96, 80, BLACK);
tree.insert_at(96, 112, BLACK);
assert_eq!("RBTree{size:7,tree:(((B:16),B:32,(B:48)),B:64,((B:80),B:96,(B:112)))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&16));
assert_eq!("RBTree{size:6,tree:((B:32,(R:48)),B:64,((B:80),R:96,(B:112)))}", tree.to_string());
tree.validate();
}
#[test]
fn test_delete_8_left() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 32, BLACK);
tree.insert_at(64, 96, BLACK);
tree.insert_at(96, 112, RED);
assert_eq!("RBTree{size:4,tree:((B:32),B:64,(B:96,(R:112)))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&32));
assert_eq!("RBTree{size:3,tree:((B:64),B:96,(B:112))}", tree.to_string());
tree.validate();
}
#[test]
fn test_delete_8_right() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 32, BLACK);
tree.insert_at(32, 16, RED);
tree.insert_at(64, 96, BLACK);
assert_eq!("RBTree{size:4,tree:(((R:16),B:32),B:64,(B:96))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&96));
assert_eq!("RBTree{size:3,tree:((B:16),B:32,(B:64))}", tree.to_string());
tree.validate();
}
#[test]
fn test_delete_9_left() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 32, BLACK);
tree.insert_at(64, 96, BLACK);
tree.insert_at(96, 80, RED);
assert_eq!("RBTree{size:4,tree:((B:32),B:64,((R:80),B:96))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&32));
assert_eq!("RBTree{size:3,tree:((B:64),B:80,(B:96))}", tree.to_string());
tree.validate();
}
#[test]
fn test_delete_9_right() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 32, BLACK);
tree.insert_at(64, 96, BLACK);
tree.insert_at(32, 48, RED);
assert_eq!("RBTree{size:4,tree:((B:32,(R:48)),B:64,(B:96))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&96));
assert_eq!("RBTree{size:3,tree:((B:32),B:48,(B:64))}", tree.to_string());
tree.validate();
}
#[test]
fn test_delete_10() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 32, BLACK);
tree.insert_at(64, 96, RED);
tree.insert_at(96, 80, BLACK);
tree.insert_at(96, 112, BLACK);
assert_eq!("RBTree{size:5,tree:((B:32),B:64,((B:80),R:96,(B:112)))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&64));
assert_eq!("RBTree{size:4,tree:((B:32),B:80,(B:96,(R:112)))}", tree.to_string());
tree.validate();
}
#[test]
fn test_delete_11() {
let mut tree: RBTree<KV32> = RBTree::new();
tree.insert(&KV32::same(64));
tree.insert_at(64, 32, BLACK);
tree.insert_at(64, 96, BLACK);
tree.insert_at(32, 16, RED);
tree.insert_at(32, 48, RED);
assert_eq!("RBTree{size:5,tree:(((R:16),B:32,(R:48)),B:64,(B:96))}", tree.to_string());
tree.validate();
assert_eq!(true, tree.delete(&64));
assert_eq!("RBTree{size:4,tree:((B:16),B:32,((R:48),B:96))}", tree.to_string());
tree.validate();
}