]>
Commit | Line | Data |
---|---|---|
b7449926 | 1 | // run-pass |
0bf4aa26 | 2 | #![allow(unused_variables)] |
b7449926 XL |
3 | #![allow(stable_features)] |
4 | ||
041b39d2 | 5 | #![feature(box_syntax, core)] |
1a4d82fc JJ |
6 | |
7 | use std::cell::RefCell; | |
8 | use std::rc::Rc; | |
1a4d82fc | 9 | |
85aaf69f | 10 | #[derive(PartialEq, Debug)] |
1a4d82fc | 11 | struct Point { |
c34b1796 AL |
12 | x: isize, |
13 | y: isize | |
1a4d82fc JJ |
14 | } |
15 | ||
16 | pub fn main() { | |
c34b1796 | 17 | let box_5: Box<_> = box 5_usize; |
1a4d82fc JJ |
18 | let point = Rc::new(Point {x: 2, y: 4}); |
19 | assert_eq!(point.x, 2); | |
20 | assert_eq!(point.y, 4); | |
21 | ||
85aaf69f | 22 | let i = Rc::new(RefCell::new(2)); |
1a4d82fc JJ |
23 | let i_value = *i.borrow(); |
24 | *i.borrow_mut() = 5; | |
25 | assert_eq!((i_value, *i.borrow()), (2, 5)); | |
26 | ||
27 | let s = Rc::new("foo".to_string()); | |
85aaf69f | 28 | assert_eq!(&**s, "foo"); |
1a4d82fc | 29 | |
62682a34 | 30 | let mut_s = Rc::new(RefCell::new(String::from("foo"))); |
1a4d82fc JJ |
31 | mut_s.borrow_mut().push_str("bar"); |
32 | // HACK assert_eq! would panic here because it stores the LHS and RHS in two locals. | |
62682a34 SL |
33 | assert_eq!(&**mut_s.borrow(), "foobar"); |
34 | assert_eq!(&**mut_s.borrow_mut(), "foobar"); | |
1a4d82fc JJ |
35 | |
36 | let p = Rc::new(RefCell::new(Point {x: 1, y: 2})); | |
37 | p.borrow_mut().x = 3; | |
38 | p.borrow_mut().y += 3; | |
39 | assert_eq!(*p.borrow(), Point {x: 3, y: 5}); | |
40 | ||
85aaf69f | 41 | let v = Rc::new(RefCell::new([1, 2, 3])); |
1a4d82fc JJ |
42 | v.borrow_mut()[0] = 3; |
43 | v.borrow_mut()[1] += 3; | |
44 | assert_eq!((v.borrow()[0], v.borrow()[1], v.borrow()[2]), (3, 5, 3)); | |
45 | } |