4 use std::sync::{Arc, Weak};
5 use std::cell::RefCell;
6 use std::cmp::PartialEq;
11 let mut a = Weak::<Void>::new();
13 assert!(a.upgrade().is_none());
15 let mut a: Weak<dyn Any> = a; // Unsizing
17 assert!(a.upgrade().is_none());
22 let a: Arc<[u32; 3]> = Arc::new([3, 2, 1]);
23 let a: Arc<[u32]> = a; // Unsizing
24 let b: Arc<[u32]> = Arc::from(&[3, 2, 1][..]); // Conversion
27 // Exercise is_dangling() with a DST
28 let mut a = Arc::downgrade(&a);
30 assert!(a.upgrade().is_some());
35 let a: Arc<u32> = Arc::new(4);
36 let a: Arc<dyn Any> = a; // Unsizing
38 // Exercise is_dangling() with a DST
39 let mut a = Arc::downgrade(&a);
41 assert!(a.upgrade().is_some());
43 let mut b = Weak::<u32>::new();
45 assert!(b.upgrade().is_none());
46 let mut b: Weak<dyn Any> = b; // Unsizing
48 assert!(b.upgrade().is_none());
53 let x = Arc::new(std::f32::NAN);
60 struct TestPEq (RefCell<usize>);
61 impl PartialEq for TestPEq {
62 fn eq(&self, other: &TestPEq) -> bool {
63 *self.0.borrow_mut() += 1;
64 *other.0.borrow_mut() += 1;
68 let x = Arc::new(TestPEq(RefCell::new(0)));
71 assert_eq!(*x.0.borrow(), 4);
77 struct TestEq (RefCell<usize>);
78 impl PartialEq for TestEq {
79 fn eq(&self, other: &TestEq) -> bool {
80 *self.0.borrow_mut() += 1;
81 *other.0.borrow_mut() += 1;
85 let x = Arc::new(TestEq(RefCell::new(0)));
88 assert_eq!(*x.0.borrow(), 0);