3 #![feature(trait_upcasting)]
4 #![allow(incomplete_features)]
9 trait Foo: PartialEq<i32> + std::fmt::Debug + Send + Sync {
60 let baz: Box<dyn Baz> = v.clone();
62 assert_eq!(baz.a(), 100);
63 assert_eq!(baz.b(), 200);
64 assert_eq!(baz.c(), 300);
65 assert_eq!(baz.z(), 11);
66 assert_eq!(baz.y(), 12);
67 assert_eq!(baz.w(), 21);
69 let baz: Box<dyn Baz> = v.clone();
70 let bar: Box<dyn Bar> = baz;
72 assert_eq!(bar.a(), 100);
73 assert_eq!(bar.b(), 200);
74 assert_eq!(bar.z(), 11);
75 assert_eq!(bar.y(), 12);
76 assert_eq!(bar.w(), 21);
78 let baz: Box<dyn Baz> = v.clone();
79 let foo: Box<dyn Foo> = baz;
81 assert_eq!(foo.a(), 100);
82 assert_eq!(foo.z(), 11);
83 assert_eq!(foo.y(), 12);
85 let baz: Box<dyn Baz> = v.clone();
86 let bar: Box<dyn Bar> = baz;
87 let foo: Box<dyn Foo> = bar;
89 assert_eq!(foo.a(), 100);
90 assert_eq!(foo.z(), 11);
91 assert_eq!(foo.y(), 12);
97 let baz: Rc<dyn Baz> = v.clone();
99 assert_eq!(baz.a(), 100);
100 assert_eq!(baz.b(), 200);
101 assert_eq!(baz.c(), 300);
102 assert_eq!(baz.z(), 11);
103 assert_eq!(baz.y(), 12);
104 assert_eq!(baz.w(), 21);
106 let baz: Rc<dyn Baz> = v.clone();
107 let bar: Rc<dyn Bar> = baz;
109 assert_eq!(bar.a(), 100);
110 assert_eq!(bar.b(), 200);
111 assert_eq!(bar.z(), 11);
112 assert_eq!(bar.y(), 12);
113 assert_eq!(bar.w(), 21);
115 let baz: Rc<dyn Baz> = v.clone();
116 let foo: Rc<dyn Foo> = baz;
118 assert_eq!(foo.a(), 100);
119 assert_eq!(foo.z(), 11);
120 assert_eq!(foo.y(), 12);
122 let baz: Rc<dyn Baz> = v.clone();
123 let bar: Rc<dyn Bar> = baz;
124 let foo: Rc<dyn Foo> = bar;
126 assert_eq!(foo.a(), 100);
127 assert_eq!(foo.z(), 11);
128 assert_eq!(foo.y(), 12);
129 assert_eq!(foo.z(), 11);
130 assert_eq!(foo.y(), 12);
136 let baz: Arc<dyn Baz> = v.clone();
138 assert_eq!(baz.a(), 100);
139 assert_eq!(baz.b(), 200);
140 assert_eq!(baz.c(), 300);
141 assert_eq!(baz.z(), 11);
142 assert_eq!(baz.y(), 12);
143 assert_eq!(baz.w(), 21);
145 let baz: Arc<dyn Baz> = v.clone();
146 let bar: Arc<dyn Bar> = baz;
148 assert_eq!(bar.a(), 100);
149 assert_eq!(bar.b(), 200);
150 assert_eq!(bar.z(), 11);
151 assert_eq!(bar.y(), 12);
152 assert_eq!(bar.w(), 21);
154 let baz: Arc<dyn Baz> = v.clone();
155 let foo: Arc<dyn Foo> = baz;
157 assert_eq!(foo.a(), 100);
158 assert_eq!(foo.z(), 11);
159 assert_eq!(foo.y(), 12);
161 let baz: Arc<dyn Baz> = v.clone();
162 let bar: Arc<dyn Bar> = baz;
163 let foo: Arc<dyn Foo> = bar;
165 assert_eq!(foo.a(), 100);
166 assert_eq!(foo.z(), 11);
167 assert_eq!(foo.y(), 12);