use augmented_rbtree::{AugmentedRBTree, Unit};
fn main() {
let mut tree = AugmentedRBTree::<i32, String, Unit>::new();
tree.insert(5, "five".to_string());
tree.insert(3, "three".to_string());
tree.insert(7, "seven".to_string());
tree.insert(1, "one".to_string());
tree.insert(9, "nine".to_string());
println!("Tree size: {}", tree.len());
println!("\n=== Immutable iteration (iter) ===");
for (k, v, _s) in &tree {
println!("Key: {k}, Value: {v}");
}
println!("\n=== Keys iteration ===");
for k in tree.keys() {
println!("Key: {k}");
}
println!("\n=== Values iteration ===");
for v in tree.values() {
println!("Value: {v}");
}
println!("\n=== Mutable iteration (iter_mut) ===");
for mut node in &mut tree {
println!("Modifying value at key {}", node.key());
node.value_mut().push_str(" (modified)");
}
println!("\n=== After modification ===");
for (k, v, _s) in &tree {
println!("Key: {k}, Value: {v}");
}
println!("\n=== Values mutable iteration ===");
for mut v in tree.values_mut() {
v.push('!');
}
println!("\n=== After values_mut ===");
for v in tree.values() {
println!("Value: {v}");
}
println!("\n=== Reverse iteration ===");
for (k, v, _s) in tree.iter().rev() {
println!("Key: {k}, Value: {v}");
}
println!("\n=== Consuming iteration (into_iter) ===");
for (k, v) in tree {
println!("Consumed - Key: {k}, Value: {v}");
}
println!("\nTree has been consumed!");
}