diff options
| author | inquisitivecrystal <22333129+inquisitivecrystal@users.noreply.github.com> | 2021-08-31 16:32:01 -0700 |
|---|---|---|
| committer | inquisitivecrystal <22333129+inquisitivecrystal@users.noreply.github.com> | 2021-08-31 16:32:01 -0700 |
| commit | 227e004d3fda91b72eef2b5e064dcbf3647dc68e (patch) | |
| tree | 9307b1a290c8d8b322c0b3950c358c0334b10884 | |
| parent | 753dac16abd16411e1833b35ba82cabac6997cec (diff) | |
| download | rust-227e004d3fda91b72eef2b5e064dcbf3647dc68e.tar.gz rust-227e004d3fda91b72eef2b5e064dcbf3647dc68e.zip | |
Add a few tests for `UnsafeCell`
| -rw-r--r-- | library/core/tests/cell.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/library/core/tests/cell.rs b/library/core/tests/cell.rs index 77517879dd2..85a006c5d5b 100644 --- a/library/core/tests/cell.rs +++ b/library/core/tests/cell.rs @@ -3,6 +3,38 @@ use core::default::Default; use std::mem::drop; #[test] +fn smoketest_unsafe_cell() { + let mut x = UnsafeCell::new(10); + let ref_mut = &mut x; + unsafe { + // The asserts are repeated in order to ensure that `get()` + // is non-mutating. + assert_eq!(*ref_mut.get(), 10); + assert_eq!(*ref_mut.get(), 10); + *ref_mut.get_mut() += 5; + assert_eq!(*ref_mut.get(), 15); + assert_eq!(*ref_mut.get(), 15); + assert_eq!(x.into_inner(), 15); + } +} + +#[test] +fn unsafe_cell_raw_get() { + let x = UnsafeCell::new(10); + let ptr = &x as *const UnsafeCell<i32>; + unsafe { + // The asserts are repeated in order to ensure that `raw_get()` + // is non-mutating. + assert_eq!(*UnsafeCell::raw_get(ptr), 10); + assert_eq!(*UnsafeCell::raw_get(ptr), 10); + *UnsafeCell::raw_get(ptr) += 5; + assert_eq!(*UnsafeCell::raw_get(ptr), 15); + assert_eq!(*UnsafeCell::raw_get(ptr), 15); + assert_eq!(x.into_inner(), 15); + } +} + +#[test] fn smoketest_cell() { let x = Cell::new(10); assert_eq!(x, Cell::new(10)); |
