summary refs log tree commit diff
path: root/src/test/run-pass/operator-overloading.rs
blob: 2f0b41dc0c6c31f65c560908754f7f4a781923a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
type point = {x: int, y: int};

impl point_ops for point {
    fn +(other: point) -> point {
        {x: self.x + other.x, y: self.y + other.y}
    }
    fn -(other: point) -> point {
        {x: self.x - other.x, y: self.y - other.y}
    }
    fn unary-() -> point {
        {x: -self.x, y: -self.y}
    }
    fn [](x: bool) -> int {
        if x { self.x } else { self.y }
    }
}

fn main() {
    let mut p = {x: 10, y: 20};
    p += {x: 101, y: 102};
    p -= {x: 100, y: 100};
    assert p + {x: 5, y: 5} == {x: 16, y: 27};
    assert -p == {x: -11, y: -22};
    assert p[true] == 11;
    assert p[false] == 22;
    // Issue #1733
    fn~(_x: int){}(p[true]);
}