//@ run-pass
// Test that we can overload the `+` operator for points so that two
// points can be added, and a point can be added to an integer.

use std::ops;

#[derive(Debug,PartialEq,Eq)]
struct Point {
    x: isize,
    y: isize
}

impl ops::Add for Point {
    type Output = Point;

    fn add(self, other: Point) -> Point {
        Point {x: self.x + other.x, y: self.y + other.y}
    }
}

impl ops::Add<isize> for Point {
    type Output = Point;

    fn add(self, other: isize) -> Point {
        Point {x: self.x + other,
               y: self.y + other}
    }
}

pub fn main() {
    let mut p = Point {x: 10, y: 20};
    p = p + Point {x: 101, y: 102};
    assert_eq!(p, Point {x: 111, y: 122});
    p = p + 1;
    assert_eq!(p, Point {x: 112, y: 123});
}
