From: inquisitivecrystal <22333129+inquisitivecrystal@users.noreply.github.com> Date: Tue, 31 Aug 2021 23:32:01 +0000 (-0700) Subject: Add a few tests for `UnsafeCell` X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=227e004d3fda91b72eef2b5e064dcbf3647dc68e;p=rust.git Add a few tests for `UnsafeCell` --- 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 @@ -2,6 +2,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; + 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);