// Test: Auto-clone for simple variables
fn main() {
test_vec_auto_clone()
test_string_auto_clone()
test_multiple_uses()
println!("✓ All simple variable auto-clone tests passed!")
}
fn test_vec_auto_clone() {
let data = vec![1, 2, 3, 4, 5]
// Move data to function (should auto-clone)
let sum = sum_vec(data)
// data should still be usable
assert!(data.len() == 5, "data should still have 5 elements")
assert!(sum == 15, "sum should be 15")
println!("✓ Vec auto-clone works")
}
fn test_string_auto_clone() {
let message = "Hello, Windjammer!"
// Move message to function (should auto-clone)
let upper = to_upper(message)
// message should still be usable
assert!(message.len() == 18, "message should still have 18 chars")
assert!(upper == "HELLO, WINDJAMMER!", "uppercase should match")
println!("✓ string auto-clone works")
}
fn test_multiple_uses() {
let numbers = vec![10, 20, 30]
// Use numbers multiple times (should auto-clone each time except last)
let first_sum = sum_vec(numbers)
let second_sum = sum_vec(numbers)
let third_sum = sum_vec(numbers)
assert!(first_sum == 60, "first sum should be 60")
assert!(second_sum == 60, "second sum should be 60")
assert!(third_sum == 60, "third sum should be 60")
println!("✓ Multiple uses auto-clone works")
}
fn sum_vec(v: Vec<int>) -> int {
v.sum()
}
fn to_upper(s: string) -> string {
s.to_uppercase()
}
fn assert(condition: bool, message: string) {
if !condition {
panic!("{}", message)
}
}