diff --git a/single_file_tests/rc.rs b/single_file_tests/rc.rs index 013235f..04a628b 100644 --- a/single_file_tests/rc.rs +++ b/single_file_tests/rc.rs @@ -1,15 +1,38 @@ use std::rc::Rc; -fn main() { - let a = Rc::new(0); - - println!("{}", Rc::strong_count(&a)); - let b = a.clone(); - println!("{}", Rc::strong_count(&a)); - let c = Rc::clone(&a); - println!("{}", Rc::strong_count(&a)); - - println!("{}", a); - println!("{}", b); - println!("{}", c); +enum List { + Cons(i32, Rc), + Nil, +} + +use List::{ Cons, Nil, }; + +fn print_list(list: &List) { + match list { + Cons(i, list) => { + println!("i -> {}", i); + print_list(&list); + }, + Nil => (), + } +} + +fn print_list2(mut list: &List) { + while let Cons(i, next_list) = list { + println!("i --> {}", i); + list = next_list; + } +} + +fn main() { + let a = Rc::new(Cons(5, Rc::new(Cons(10, Rc::new(Nil))))); + let b = Cons(3, Rc::clone(&a)); + let c = Cons(4, a.clone()); + + println!("print a"); + print_list(&a); + println!("print b"); + print_list(&b); + println!("print c"); + print_list2(&c); }