84 lines
2.4 KiB
Rust
84 lines
2.4 KiB
Rust
// ============================================================================
|
|
// 🧪 TESTSUITE: RUST 12 SMART POINTER (BOX, RC, REFCELL)
|
|
// ============================================================================
|
|
|
|
#[allow(dead_code)]
|
|
#[path = "aufgabe.rs"]
|
|
mod aufgabe;
|
|
|
|
#[allow(unused_imports)]
|
|
use aufgabe::*;
|
|
use std::cell::RefCell;
|
|
use std::rc::Rc;
|
|
|
|
// TEST: test_tree_node_box
|
|
#[test]
|
|
fn test_tree_node_box() {
|
|
let mut tree = TreeNode::new();
|
|
assert_eq!(tree.sum(), 0);
|
|
assert_eq!(tree.contains(10), false);
|
|
|
|
tree.insert(50);
|
|
tree.insert(25);
|
|
tree.insert(75);
|
|
tree.insert(10);
|
|
tree.insert(30);
|
|
|
|
assert_eq!(tree.sum(), 190);
|
|
assert!(tree.contains(50));
|
|
assert!(tree.contains(25));
|
|
assert!(tree.contains(75));
|
|
assert!(tree.contains(10));
|
|
assert!(tree.contains(30));
|
|
assert_eq!(tree.contains(999), false);
|
|
}
|
|
|
|
// TEST: test_shared_counter_rc_refcell
|
|
#[test]
|
|
fn test_shared_counter_rc_refcell() {
|
|
let counter = SharedCounter::new(10);
|
|
assert_eq!(counter.get(), 10);
|
|
assert_eq!(counter.strong_count(), 1);
|
|
|
|
let handle_a = counter.clone_handle();
|
|
let handle_b = counter.clone_handle();
|
|
assert_eq!(counter.strong_count(), 3);
|
|
|
|
handle_a.increment(15);
|
|
assert_eq!(counter.get(), 25);
|
|
assert_eq!(handle_b.get(), 25);
|
|
|
|
handle_b.increment(-5);
|
|
assert_eq!(counter.get(), 20);
|
|
|
|
drop(handle_a);
|
|
assert_eq!(counter.strong_count(), 2);
|
|
}
|
|
|
|
// TEST: test_raii_drop_cleanup
|
|
#[test]
|
|
fn test_raii_drop_cleanup() {
|
|
let log = Rc::new(RefCell::new(Vec::new()));
|
|
|
|
{
|
|
let _r1 = MockResource::new("Socket_A", Rc::clone(&log));
|
|
let _r2 = MockResource::new("Socket_B", Rc::clone(&log));
|
|
assert_eq!(log.borrow().len(), 0);
|
|
} // Hier werden _r2 und _r1 gedroppt (in umgekehrter Reihenfolge)
|
|
|
|
let entries = log.borrow();
|
|
assert_eq!(entries.len(), 2);
|
|
assert!(entries.contains(&"Dropped Socket_A".to_string()));
|
|
assert!(entries.contains(&"Dropped Socket_B".to_string()));
|
|
}
|
|
|
|
fn main() {
|
|
println!("🧪 Führe Rust 12 Testsuite aus...");
|
|
test_tree_node_box();
|
|
println!(" ✓ test_tree_node_box bestanden");
|
|
test_shared_counter_rc_refcell();
|
|
println!(" ✓ test_shared_counter_rc_refcell bestanden");
|
|
test_raii_drop_cleanup();
|
|
println!(" ✓ test_raii_drop_cleanup bestanden");
|
|
println!("\n✅ Alle Tests für Rust 12 erfolgreich bestanden!");
|
|
}
|