3 #![feature(trait_upcasting)]
8 trait Foo: PartialEq<i32> + std::fmt::Debug + Send + Sync {
59 let baz: Box<dyn Baz> = v.clone();
61 assert_eq!(baz.a(), 100);
62 assert_eq!(baz.b(), 200);
63 assert_eq!(baz.c(), 300);
64 assert_eq!(baz.z(), 11);
65 assert_eq!(baz.y(), 12);
66 assert_eq!(baz.w(), 21);
68 let baz: Box<dyn Baz> = v.clone();
69 let bar: Box<dyn Bar> = baz;
71 assert_eq!(bar.a(), 100);
72 assert_eq!(bar.b(), 200);
73 assert_eq!(bar.z(), 11);
74 assert_eq!(bar.y(), 12);
75 assert_eq!(bar.w(), 21);
77 let baz: Box<dyn Baz> = v.clone();
78 let foo: Box<dyn Foo> = baz;
80 assert_eq!(foo.a(), 100);
81 assert_eq!(foo.z(), 11);
82 assert_eq!(foo.y(), 12);
84 let baz: Box<dyn Baz> = v.clone();
85 let bar: Box<dyn Bar> = baz;
86 let foo: Box<dyn Foo> = bar;
88 assert_eq!(foo.a(), 100);
89 assert_eq!(foo.z(), 11);
90 assert_eq!(foo.y(), 12);
96 let baz: Rc<dyn Baz> = v.clone();
98 assert_eq!(baz.a(), 100);
99 assert_eq!(baz.b(), 200);
100 assert_eq!(baz.c(), 300);
101 assert_eq!(baz.z(), 11);
102 assert_eq!(baz.y(), 12);
103 assert_eq!(baz.w(), 21);
105 let baz: Rc<dyn Baz> = v.clone();
106 let bar: Rc<dyn Bar> = baz;
108 assert_eq!(bar.a(), 100);
109 assert_eq!(bar.b(), 200);
110 assert_eq!(bar.z(), 11);
111 assert_eq!(bar.y(), 12);
112 assert_eq!(bar.w(), 21);
114 let baz: Rc<dyn Baz> = v.clone();
115 let foo: Rc<dyn Foo> = baz;
117 assert_eq!(foo.a(), 100);
118 assert_eq!(foo.z(), 11);
119 assert_eq!(foo.y(), 12);
121 let baz: Rc<dyn Baz> = v.clone();
122 let bar: Rc<dyn Bar> = baz;
123 let foo: Rc<dyn Foo> = bar;
125 assert_eq!(foo.a(), 100);
126 assert_eq!(foo.z(), 11);
127 assert_eq!(foo.y(), 12);
128 assert_eq!(foo.z(), 11);
129 assert_eq!(foo.y(), 12);
135 let baz: Arc<dyn Baz> = v.clone();
137 assert_eq!(baz.a(), 100);
138 assert_eq!(baz.b(), 200);
139 assert_eq!(baz.c(), 300);
140 assert_eq!(baz.z(), 11);
141 assert_eq!(baz.y(), 12);
142 assert_eq!(baz.w(), 21);
144 let baz: Arc<dyn Baz> = v.clone();
145 let bar: Arc<dyn Bar> = baz;
147 assert_eq!(bar.a(), 100);
148 assert_eq!(bar.b(), 200);
149 assert_eq!(bar.z(), 11);
150 assert_eq!(bar.y(), 12);
151 assert_eq!(bar.w(), 21);
153 let baz: Arc<dyn Baz> = v.clone();
154 let foo: Arc<dyn Foo> = baz;
156 assert_eq!(foo.a(), 100);
157 assert_eq!(foo.z(), 11);
158 assert_eq!(foo.y(), 12);
160 let baz: Arc<dyn Baz> = v.clone();
161 let bar: Arc<dyn Bar> = baz;
162 let foo: Arc<dyn Foo> = bar;
164 assert_eq!(foo.a(), 100);
165 assert_eq!(foo.z(), 11);
166 assert_eq!(foo.y(), 12);