]> git.lizzy.rs Git - rust.git/commitdiff
Add a few tests for `UnsafeCell`
authorinquisitivecrystal <22333129+inquisitivecrystal@users.noreply.github.com>
Tue, 31 Aug 2021 23:32:01 +0000 (16:32 -0700)
committerinquisitivecrystal <22333129+inquisitivecrystal@users.noreply.github.com>
Tue, 31 Aug 2021 23:32:01 +0000 (16:32 -0700)
library/core/tests/cell.rs

index 77517879dd2507f20df999d24caf294e5599042d..85a006c5d5bef7ebca5a4146ae651a1f5891b298 100644 (file)
@@ -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<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);