3 #[derive(PartialEq, Debug)]
6 static TEST: &'static str = "Test";
10 let (a, b, c) = (&5 as &dyn Any, &TEST as &dyn Any, &Test as &dyn Any);
12 assert!(a.is::<i32>());
13 assert!(!b.is::<i32>());
14 assert!(!c.is::<i32>());
16 assert!(!a.is::<&'static str>());
17 assert!(b.is::<&'static str>());
18 assert!(!c.is::<&'static str>());
20 assert!(!a.is::<Test>());
21 assert!(!b.is::<Test>());
22 assert!(c.is::<Test>());
28 (box 5_usize as Box<dyn Any>, box TEST as Box<dyn Any>, box Test as Box<dyn Any>);
30 assert!(a.is::<usize>());
31 assert!(!b.is::<usize>());
32 assert!(!c.is::<usize>());
34 assert!(!a.is::<&'static str>());
35 assert!(b.is::<&'static str>());
36 assert!(!c.is::<&'static str>());
38 assert!(!a.is::<Test>());
39 assert!(!b.is::<Test>());
40 assert!(c.is::<Test>());
44 fn any_downcast_ref() {
45 let a = &5_usize as &dyn Any;
47 match a.downcast_ref::<usize>() {
49 x => panic!("Unexpected value {:?}", x),
52 match a.downcast_ref::<Test>() {
54 x => panic!("Unexpected value {:?}", x),
59 fn any_downcast_mut() {
61 let mut b: Box<_> = box 7_usize;
63 let a_r = &mut a as &mut dyn Any;
64 let tmp: &mut usize = &mut *b;
65 let b_r = tmp as &mut dyn Any;
67 match a_r.downcast_mut::<usize>() {
72 x => panic!("Unexpected value {:?}", x),
75 match b_r.downcast_mut::<usize>() {
80 x => panic!("Unexpected value {:?}", x),
83 match a_r.downcast_mut::<Test>() {
85 x => panic!("Unexpected value {:?}", x),
88 match b_r.downcast_mut::<Test>() {
90 x => panic!("Unexpected value {:?}", x),
93 match a_r.downcast_mut::<usize>() {
95 x => panic!("Unexpected value {:?}", x),
98 match b_r.downcast_mut::<usize>() {
100 x => panic!("Unexpected value {:?}", x),
106 let test = [0_usize; 8];
107 let test = &test as &dyn Any;
108 assert!(test.is::<[usize; 8]>());
109 assert!(!test.is::<[usize; 10]>());
114 fn is_any<T: Any + ?Sized>() {}
119 fn distinct_type_names() {
120 // https://github.com/rust-lang/rust/issues/84666
122 struct Velocity(f32, f32);
124 fn type_name_of_val<T>(_: T) -> &'static str {
128 assert_ne!(type_name_of_val(Velocity), type_name_of_val(Velocity(0.0, -9.8)),);