// move_semantics2.rs // // Make the test pass by finding a way to keep both Vecs separate! // // Execute `rustlings hint move_semantics2` or use the `hint` watch subcommand // for a hint. #[test] fn main() { let vec0 = vec![22, 44, 66]; let vec1 = fill_vec(vec0.clone()); // When vec0 is passed to fill_vec, the function takes OWNERSHIP // of the vector. It mutates the vector and passes ownershpip to vec1. // Once a value has moved, we can no longer use it. // this is why, we need to clone it so that we can use it again // Using clone() makes an entire copy of the vector. DEEP COPY. // It is also a separate object in memory. // Changes to the original vector does not affect the cloned vector and vice versa assert_eq!(vec0, vec![22, 44, 66]); assert_eq!(vec1, vec![22, 44, 66, 88]); } fn fill_vec(vec: Vec) -> Vec { let mut vec = vec; vec.push(88); vec }