]> git.proxmox.com Git - rustc.git/blob - src/test/run-pass/issues/issue-3979-generics.rs
New upstream version 1.33.0+dfsg1
[rustc.git] / src / test / run-pass / issues / issue-3979-generics.rs
1 // run-pass
2 #![allow(dead_code)]
3 #![allow(non_snake_case)]
4
5 use std::ops::Add;
6
7 trait Positioned<S> {
8 fn SetX(&mut self, _: S);
9 fn X(&self) -> S;
10 }
11
12 trait Movable<S: Add<Output=S>>: Positioned<S> {
13 fn translate(&mut self, dx: S) {
14 let x = self.X() + dx;
15 self.SetX(x);
16 }
17 }
18
19 struct Point { x: isize, y: isize }
20
21 impl Positioned<isize> for Point {
22 fn SetX(&mut self, x: isize) {
23 self.x = x;
24 }
25 fn X(&self) -> isize {
26 self.x
27 }
28 }
29
30 impl Movable<isize> for Point {}
31
32 pub fn main() {
33 let mut p = Point{ x: 1, y: 2};
34 p.translate(3);
35 assert_eq!(p.X(), 4);
36 }