diff options
| author | CAD97 <cad97@cad97.com> | 2020-07-14 15:35:14 -0400 |
|---|---|---|
| committer | CAD97 <cad97@cad97.com> | 2020-09-12 10:38:33 -0500 |
| commit | 3d07108d3600dff50e564f57dd390337dbe14d55 (patch) | |
| tree | a5c7f69e1ec657577aeafc39d411ec4a5df56b37 /library/alloc/src/sync | |
| parent | 9d9903c5a50bb1f5b5fc3045b86172279eff7d30 (diff) | |
| download | rust-3d07108d3600dff50e564f57dd390337dbe14d55.tar.gz rust-3d07108d3600dff50e564f57dd390337dbe14d55.zip | |
Add tests for weak into/from raw
Diffstat (limited to 'library/alloc/src/sync')
| -rw-r--r-- | library/alloc/src/sync/tests.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/library/alloc/src/sync/tests.rs b/library/alloc/src/sync/tests.rs index d2517171606..77f328d48f9 100644 --- a/library/alloc/src/sync/tests.rs +++ b/library/alloc/src/sync/tests.rs @@ -141,6 +141,48 @@ fn test_into_from_raw_unsized() { } #[test] +fn into_from_weak_raw() { + let x = Arc::new(box "hello"); + let y = Arc::downgrade(&x); + + let y_ptr = Weak::into_raw(y); + unsafe { + assert_eq!(**y_ptr, "hello"); + + let y = Weak::from_raw(y_ptr); + let y_up = Weak::upgrade(&y).unwrap(); + assert_eq!(**y_up, "hello"); + drop(y_up); + + assert_eq!(Arc::try_unwrap(x).map(|x| *x), Ok("hello")); + } +} + +#[test] +fn test_into_from_weak_raw_unsized() { + use std::fmt::Display; + use std::string::ToString; + + let arc: Arc<str> = Arc::from("foo"); + let weak: Weak<str> = Arc::downgrade(&arc); + + let ptr = Weak::into_raw(weak.clone()); + let weak2 = unsafe { Weak::from_raw(ptr) }; + + assert_eq!(unsafe { &*ptr }, "foo"); + assert!(weak.ptr_eq(&weak2)); + + let arc: Arc<dyn Display> = Arc::new(123); + let weak: Weak<dyn Display> = Arc::downgrade(&arc); + + let ptr = Weak::into_raw(weak.clone()); + let weak2 = unsafe { Weak::from_raw(ptr) }; + + assert_eq!(unsafe { &*ptr }.to_string(), "123"); + assert!(weak.ptr_eq(&weak2)); +} + +#[test] fn test_cowarc_clone_make_mut() { let mut cow0 = Arc::new(75); let mut cow1 = cow0.clone(); |
