diff --git a/single_file_tests/chain.rs b/single_file_tests/chain.rs new file mode 100644 index 0000000..9c43f1d --- /dev/null +++ b/single_file_tests/chain.rs @@ -0,0 +1,46 @@ +use std::rc::Rc; +use std::fmt::Display; + +enum Node { + Nil, + Value(T, Rc>), +} + +fn build_chain_str() -> Node { + let mut chain = Node::::Nil; + for &n in &["Tom", "Jerry", "Mike"] { + let node = Node::::Value(n.into(), Rc::new(chain)); + chain = node; + } + chain +} + +fn build_chain_usize() -> Node { + let mut chain = Node::::Nil; + for &n in &[1, 2, 3, 4, 5] { + let node = Node::::Value(n, Rc::new(chain)); + chain = node; + } + chain +} + +fn print_chain(chain: &Node) where T: Display { + let mut ptr = chain; + while let Node::Value(n, next) = ptr { + print!("{}", n); + ptr = next; + + if let &Node::::Value(_, _) = ptr { + print!(" -> "); + } + } + println!(); +} + +fn main() { + let chain = build_chain_str(); + print_chain(&chain); + + let chain_usize = build_chain_usize(); + print_chain(&chain_usize); +}