2 use std::sync::{Arc, Weak};
3 use std::cell::RefCell;
4 use std::cmp::PartialEq;
9 let mut a = Weak::<Void>::new();
11 assert!(a.upgrade().is_none());
13 let mut a: Weak<dyn Any> = a; // Unsizing
15 assert!(a.upgrade().is_none());
20 let a: Arc<[u32; 3]> = Arc::new([3, 2, 1]);
21 let a: Arc<[u32]> = a; // Unsizing
22 let b: Arc<[u32]> = Arc::from(&[3, 2, 1][..]); // Conversion
25 // Exercise is_dangling() with a DST
26 let mut a = Arc::downgrade(&a);
28 assert!(a.upgrade().is_some());
33 let a: Arc<u32> = Arc::new(4);
34 let a: Arc<dyn Any> = a; // Unsizing
36 // Exercise is_dangling() with a DST
37 let mut a = Arc::downgrade(&a);
39 assert!(a.upgrade().is_some());
41 let mut b = Weak::<u32>::new();
43 assert!(b.upgrade().is_none());
44 let mut b: Weak<dyn Any> = b; // Unsizing
46 assert!(b.upgrade().is_none());
51 let x = Arc::new(std::f32::NAN);
58 struct TestPEq (RefCell<usize>);
59 impl PartialEq for TestPEq {
60 fn eq(&self, other: &TestPEq) -> bool {
61 *self.0.borrow_mut() += 1;
62 *other.0.borrow_mut() += 1;
66 let x = Arc::new(TestPEq(RefCell::new(0)));
69 assert_eq!(*x.0.borrow(), 4);
75 struct TestEq (RefCell<usize>);
76 impl PartialEq for TestEq {
77 fn eq(&self, other: &TestEq) -> bool {
78 *self.0.borrow_mut() += 1;
79 *other.0.borrow_mut() += 1;
83 let x = Arc::new(TestEq(RefCell::new(0)));
86 assert_eq!(*x.0.borrow(), 0);