1 use std::ops::{Add, AddAssign};
5 ( $x:expr, $y:expr ) => { Point2D { x:$x, y:$y } };
8 #[derive(Debug, Copy, Clone, PartialEq)]
9 pub struct Point2D<T> {
15 pub fn length(self) -> f64 {
16 ((self.x * self.x) + (self.y * self.y)).sqrt()
20 impl<T: Add<Output=T>> Add for Point2D<T> {
21 type Output = Point2D<T>;
23 fn add(self, rhs: Point2D<T>) -> Self::Output {
24 Point2D { x: self.x + rhs.x, y: self.y + rhs.y }
28 impl<T: AddAssign> AddAssign for Point2D<T> {
29 fn add_assign(&mut self, rhs: Point2D<T>) {
40 fn immutable_copy_of_point() {
42 let mut b = a; // Copy
43 assert_eq!(a, b); // PartialEq
45 assert_ne!(a, b); // PartialEq
50 let mut a = point!(1, 0);
51 assert_eq!(a + point!(2, 2), point!(3, 2)); // Add
52 a += point!(2, 2); // AddAssign
53 assert_eq!(a, point!(3, 2));