//@ run-pass // Test that `Clone` is correctly implemented for builtin types. // Also test that cloning an array or a tuple is done right, i.e. // each component is cloned. fn test_clone(arg: T) { let _ = arg.clone(); } fn foo() { } #[derive(Debug, PartialEq, Eq)] struct S(i32); impl Clone for S { fn clone(&self) -> Self { S(self.0 + 1) } } fn main() { test_clone(foo); test_clone([1; 56]); test_clone((1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)); let a = [S(0), S(1), S(2)]; let b = [S(1), S(2), S(3)]; assert_eq!(b, a.clone()); let a = ( (S(1), S(0)), ( (S(0), S(0), S(1)), S(0) ) ); let b = ( (S(2), S(1)), ( (S(1), S(1), S(2)), S(1) ) ); assert_eq!(b, a.clone()); }