use ego_tree::tree; #[test] fn into_iter() { let tree = tree!('a' => { 'b', 'c', 'd' }); assert_eq!( vec!['a', 'b', 'c', 'd'], tree.into_iter().collect::>() ); } #[test] fn values() { let tree = tree!('a' => { 'b', 'c', 'd' }); assert_eq!( vec![&'a', &'b', &'c', &'d'], tree.values().collect::>() ); } #[test] fn values_mut() { let mut tree = tree!('a' => { 'b', 'c', 'd' }); for c in tree.values_mut() { *c = c.to_ascii_uppercase(); } assert_eq!( vec![&'A', &'B', &'C', &'D'], tree.values().collect::>() ); } #[test] fn nodes() { let mut tree = tree!('a' => { 'b' => { 'c' }, 'd' }); tree.orphan('e').append('f'); tree.root_mut().append('g'); assert_eq!( vec![&'a', &'b', &'c', &'d', &'e', &'f', &'g'], tree.nodes().map(|n| n.value()).collect::>() ); } #[test] fn ancestors() { let tree = tree!('a' => { 'b' => { 'c' => { 'd' } } }); let d = tree .root() .last_child() .unwrap() .last_child() .unwrap() .last_child() .unwrap(); assert_eq!( vec![&'c', &'b', &'a'], d.ancestors().map(|n| n.value()).collect::>() ); } #[test] fn ancestors_fused() { let tree = tree!('a' => { 'b' => { 'c' => { 'd' } } }); let d = tree .root() .last_child() .unwrap() .last_child() .unwrap() .last_child() .unwrap(); let mut ancestors = d.ancestors(); assert_eq!(ancestors.by_ref().count(), 3); assert_eq!(ancestors.next(), None); } #[test] fn prev_siblings() { let tree = tree!('a' => { 'b', 'c', 'd' }); assert_eq!( vec![&'c', &'b'], tree.root() .last_child() .unwrap() .prev_siblings() .map(|n| n.value()) .collect::>() ); } #[test] fn next_siblings() { let tree = tree!('a' => { 'b', 'c', 'd' }); assert_eq!( vec![&'c', &'d'], tree.root() .first_child() .unwrap() .next_siblings() .map(|n| n.value()) .collect::>() ); } #[test] fn children() { let tree = tree!('a' => { 'b', 'c', 'd' }); assert_eq!( vec![&'b', &'c', &'d'], tree.root() .children() .map(|n| n.value()) .collect::>() ); } #[test] fn children_fused() { let tree = tree!('a' => { 'b', 'c', 'd' }); let mut children = tree.root().children(); assert_eq!(children.by_ref().count(), 3); assert_eq!(children.next(), None); } #[test] fn children_rev() { let tree = tree!('a' => { 'b', 'c', 'd' }); assert_eq!( vec![&'d', &'c', &'b'], tree.root() .children() .rev() .map(|n| n.value()) .collect::>() ); } #[test] fn first_children() { let tree = tree!('a' => { 'b' => { 'd', 'e' }, 'c' }); assert_eq!( vec![&'b', &'d'], tree.root() .first_children() .map(|n| n.value()) .collect::>() ); } #[test] fn last_children() { let tree = tree!('a' => { 'b', 'c' => { 'd', 'e' } }); assert_eq!( vec![&'c', &'e'], tree.root() .last_children() .map(|n| n.value()) .collect::>() ); } #[test] fn traverse() { use ego_tree::iter::Edge; #[derive(Debug, PartialEq, Eq)] enum Value<'a> { Open(&'a char), Close(&'a char), } let tree = tree!('a' => { 'b' => { 'd', 'e' }, 'c' }); let traversal = tree .root() .traverse() .map(|edge| match edge { Edge::Open(node) => Value::Open(node.value()), Edge::Close(node) => Value::Close(node.value()), }) .collect::>(); assert_eq!( &[ Value::Open(&'a'), Value::Open(&'b'), Value::Open(&'d'), Value::Close(&'d'), Value::Open(&'e'), Value::Close(&'e'), Value::Close(&'b'), Value::Open(&'c'), Value::Close(&'c'), Value::Close(&'a'), ], &traversal[..] ); } #[test] fn traverse_fused() { let tree = tree!('a' => { 'b' => { 'd', 'e' }, 'c' }); let mut traversal = tree.root().traverse(); assert_eq!(traversal.by_ref().count(), 2 * 5); assert_eq!(traversal.next(), None); } #[test] fn descendants() { let tree = tree!('a' => { 'b' => { 'd', 'e' }, 'c' }); let descendants = tree .root() .descendants() .map(|n| n.value()) .collect::>(); assert_eq!(&[&'a', &'b', &'d', &'e', &'c',], &descendants[..]); } #[test] fn descendants_fused() { let tree = tree!('a' => { 'b' => { 'd', 'e' }, 'c' }); let mut descendants = tree.root().descendants(); assert_eq!(descendants.by_ref().count(), 5); assert_eq!(descendants.next(), None); }