1 use std::ops::{Add, AddAssign};
4 ( $x:expr, $y:expr ) => { Point2D { x:$x, y:$y } };
7 #[derive(Debug, Copy, Clone, PartialEq)]
8 pub struct Point2D<T> {
14 pub fn length(self) -> f64 {
15 ((self.x * self.x) + (self.y * self.y)).sqrt()
19 impl<T: Add<Output=T>> Add for Point2D<T> {
20 type Output = Point2D<T>;
22 fn add(self, rhs: Point2D<T>) -> Self::Output {
23 Point2D { x: self.x + rhs.x, y: self.y + rhs.y }
27 impl<T: AddAssign> AddAssign for Point2D<T> {
28 fn add_assign(&mut self, rhs: Point2D<T>) {
39 fn immutable_copy_of_point() {
41 let mut b = a; // Copy
42 assert_eq!(a, b); // PartialEq
44 assert_ne!(a, b); // PartialEq
49 let mut a = point!(1, 0);
50 assert_eq!(a + point!(2, 2), point!(3, 2)); // Add
51 a += point!(2, 2); // AddAssign
52 assert_eq!(a, point!(3, 2));