| 109 | |
| 110 | #[test] |
| 111 | pub fn test_ptr_eq_wrapper() { |
| 112 | let a = Arc::new("Hello".to_string()); |
| 113 | let b = Arc::new(a.deref().clone()); |
| 114 | let c = Arc::new("world".to_string()); |
| 115 | |
| 116 | let wrapper = PtrEq(Arc::clone(&a)); |
| 117 | assert_eq!(wrapper, wrapper); |
| 118 | |
| 119 | // same address (equal) |
| 120 | assert_eq!(PtrEq(Arc::clone(&a)), PtrEq(Arc::clone(&a))); |
| 121 | assert_eq!(hash(PtrEq(Arc::clone(&a))), hash(PtrEq(Arc::clone(&a)))); |
| 122 | |
| 123 | // different address, same content (not equal) |
| 124 | assert_ne!(PtrEq(Arc::clone(&a)), PtrEq(Arc::clone(&b))); |
| 125 | |
| 126 | // different address, different content (not equal) |
| 127 | assert_ne!(PtrEq(Arc::clone(&a)), PtrEq(Arc::clone(&c))); |
| 128 | } |
| 129 | |
| 130 | fn hash<T: Hash>(value: T) -> u64 { |
| 131 | let hasher = &mut DefaultHasher::new(); |