about summary refs log tree commit diff
path: root/src/libcoretest
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-05-03 17:22:09 +0000
committerbors <bors@rust-lang.org>2015-05-03 17:22:09 +0000
commit1a60dc4fc4b66760b71f1700cdb8b151cb8a67d9 (patch)
tree3998daf2afd0c715a001ea3f4ae962e5827d7b97 /src/libcoretest
parent26933a638c360442412b51aa70fe25e419f44314 (diff)
parent57d8289754767e046a01abaab6054b7146c51f74 (diff)
downloadrust-1a60dc4fc4b66760b71f1700cdb8b151cb8a67d9.tar.gz
rust-1a60dc4fc4b66760b71f1700cdb8b151cb8a67d9.zip
Auto merge of #24737 - P1start:dst-cell, r=alexcrichton
This + DST coercions (#24619) would allow code like `Rc<RefCell<Box<Trait>>>` to be simplified to `Rc<RefCell<Trait>>`.
Diffstat (limited to 'src/libcoretest')
-rw-r--r--src/libcoretest/cell.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/libcoretest/cell.rs b/src/libcoretest/cell.rs
index 85dd1039003..0bd0b66318f 100644
--- a/src/libcoretest/cell.rs
+++ b/src/libcoretest/cell.rs
@@ -159,3 +159,27 @@ fn refcell_default() {
     let cell: RefCell<u64> = Default::default();
     assert_eq!(0, *cell.borrow());
 }
+
+#[test]
+fn unsafe_cell_unsized() {
+    let cell: &UnsafeCell<[i32]> = &UnsafeCell::new([1, 2, 3]);
+    {
+        let val: &mut [i32] = unsafe { &mut *cell.get() };
+        val[0] = 4;
+        val[2] = 5;
+    }
+    let comp: &mut [i32] = &mut [4, 2, 5];
+    assert_eq!(unsafe { &mut *cell.get() }, comp);
+}
+
+#[test]
+fn refcell_unsized() {
+    let cell: &RefCell<[i32]> = &RefCell::new([1, 2, 3]);
+    {
+        let b = &mut *cell.borrow_mut();
+        b[0] = 4;
+        b[2] = 5;
+    }
+    let comp: &mut [i32] = &mut [4, 2, 5];
+    assert_eq!(&*cell.borrow(), comp);
+}