// Copyright 2014 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. use core::any::*; use test::Bencher; use test; #[deriving(PartialEq, Show)] struct Test; static TEST: &'static str = "Test"; #[test] fn any_referenced() { let (a, b, c) = (&5u as &Any, &TEST as &Any, &Test as &Any); assert!(a.is::()); assert!(!b.is::()); assert!(!c.is::()); assert!(!a.is::<&'static str>()); assert!(b.is::<&'static str>()); assert!(!c.is::<&'static str>()); assert!(!a.is::()); assert!(!b.is::()); assert!(c.is::()); } #[test] fn any_owning() { let (a, b, c) = (box 5u as Box, box TEST as Box, box Test as Box); assert!(a.is::()); assert!(!b.is::()); assert!(!c.is::()); assert!(!a.is::<&'static str>()); assert!(b.is::<&'static str>()); assert!(!c.is::<&'static str>()); assert!(!a.is::()); assert!(!b.is::()); assert!(c.is::()); } #[test] fn any_downcast_ref() { let a = &5u as &Any; match a.downcast_ref::() { Some(&5) => {} x => fail!("Unexpected value {}", x) } match a.downcast_ref::() { None => {} x => fail!("Unexpected value {}", x) } } #[test] fn any_downcast_mut() { let mut a = 5u; let mut b = box 7u; let a_r = &mut a as &mut Any; let tmp: &mut uint = &mut *b; let b_r = tmp as &mut Any; match a_r.downcast_mut::() { Some(x) => { assert_eq!(*x, 5u); *x = 612; } x => fail!("Unexpected value {}", x) } match b_r.downcast_mut::() { Some(x) => { assert_eq!(*x, 7u); *x = 413; } x => fail!("Unexpected value {}", x) } match a_r.downcast_mut::() { None => (), x => fail!("Unexpected value {}", x) } match b_r.downcast_mut::() { None => (), x => fail!("Unexpected value {}", x) } match a_r.downcast_mut::() { Some(&612) => {} x => fail!("Unexpected value {}", x) } match b_r.downcast_mut::() { Some(&413) => {} x => fail!("Unexpected value {}", x) } } #[test] fn any_fixed_vec() { let test = [0u, ..8]; let test = &test as &Any; assert!(test.is::<[uint, ..8]>()); assert!(!test.is::<[uint, ..10]>()); } #[bench] fn bench_downcast_ref(b: &mut Bencher) { b.iter(|| { let mut x = 0i; let mut y = &mut x as &mut Any; test::black_box(&mut y); test::black_box(y.downcast_ref::() == Some(&0)); }); }