pub module impl_test; struct Vector2 { x i32, y i32, } impl Vector2 { pub fn i32 magnitude(*self) { self.x * self.x + self.y * self.y } } pub fn void test_inherent_impl() { let v = Vector2 { x: 3, y: 4 }; assert_eq!(v.magnitude(), 25); } trait Display { fn String display(*self); } impl Display for Vector2 { fn String display(*self) { format!("({}, {})", self.x, self.y) } } pub fn void test_trait_impl_block() { let v = Vector2 { x: 1, y: 2 }; let s = v.display(); assert_eq!(s.len() > 0, true); } impl Vector2 { pub fn Vector2 add(*self, other Vector2) { Vector2 { x: self.x + other.x, y: self.y + other.y, } } } pub fn void test_multiple_impls() { let a = Vector2 { x: 1, y: 2 }; let b = Vector2 { x: 3, y: 4 }; let c = a.add(b); assert_eq!(c.x, 4); assert_eq!(c.y, 6); } pub fn void run_tests() { test_inherent_impl(); test_trait_impl_block(); test_multiple_impls(); }