From e6a874b0bf35b7f5fadfc63f18be45ecc30579e7 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Tue, 29 Aug 2017 16:51:26 +0200 Subject: [PATCH] test new From instances for Rc --- tests/run-pass/rc.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tests/run-pass/rc.rs b/tests/run-pass/rc.rs index c6de3675abe8..0bf707503112 100644 --- a/tests/run-pass/rc.rs +++ b/tests/run-pass/rc.rs @@ -1,11 +1,11 @@ use std::cell::RefCell; use std::rc::Rc; -fn rc_refcell() -> i32 { +fn rc_refcell() { let r = Rc::new(RefCell::new(42)); *r.borrow_mut() += 10; let x = *r.borrow(); - x + assert_eq!(x, 52); } fn rc_raw() { @@ -17,7 +17,23 @@ fn rc_raw() { assert!(Rc::try_unwrap(r2).is_ok()); } +// Make sure this Rc doesn't fall apart when touched +fn check_unique_rc(mut r: Rc) { + let r2 = r.clone(); + assert!(Rc::get_mut(&mut r).is_none()); + drop(r2); + assert!(Rc::get_mut(&mut r).is_some()); +} + +fn rc_from() { + check_unique_rc::<[_]>(Rc::from(&[1,2,3] as &[_])); + check_unique_rc::<[_]>(Rc::from(vec![1,2,3])); + check_unique_rc::<[_]>(Rc::from(Box::new([1,2,3]) as Box<[_]>)); + check_unique_rc::(Rc::from("Hello, World!")); +} + fn main() { rc_refcell(); rc_raw(); + rc_from(); }