From 6b908aacd256cf26aad0d724180c7a30fe658473 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 23 Feb 2020 11:11:34 +0100 Subject: Add tests whether linking results in only root and leave unlinked Signed-off-by: Matthias Beyer --- lib/etc/libimagutil/src/tree.rs | 55 ++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/lib/etc/libimagutil/src/tree.rs b/lib/etc/libimagutil/src/tree.rs index 10b10874..c5284522 100644 --- a/lib/etc/libimagutil/src/tree.rs +++ b/lib/etc/libimagutil/src/tree.rs @@ -144,10 +144,31 @@ impl<'a, T, ID, IG> TreeBuilder<'a, T, ID, IG> } } +pub struct Traverse<'a, T: Sized>(&'a Tree); + + #[cfg(test)] mod tests { use super::*; + struct IdGetterImpl; + impl IdGetter for IdGetterImpl { + type ID = usize; + + fn get_id_for_node(&self, node: &usize) -> Result { + Ok(*node) + } + + fn get_id_for_parent_of(&self, node: &usize) -> Result> { + if *node > 1 { + Ok(Some(*node - 1)) + } else { + Ok(None) + } + } + } + + #[test] fn test_insertion() { let mut tree = Tree::new(); @@ -163,28 +184,28 @@ mod tests { let mut tree = Tree::new(); (1..100).for_each(|i| tree.add_node(i)); - struct IdGetterImpl; - impl IdGetter for IdGetterImpl { - type ID = usize; + let r = tree.build_tree::(IdGetterImpl).build(); + assert!(r.is_ok()); + } - fn get_id_for_node(&self, node: &usize) -> Result { - Ok(*node) - } - fn get_id_for_parent_of(&self, node: &usize) -> Result> { - if *node > 1 { - Ok(Some(*node - 1)) - } else { - Ok(None) - } - } - } + #[test] + fn test_linking_leaves_none_unlinked() { + let mut tree = Tree::new(); + (1..100).for_each(|i| tree.add_node(i)); + let r = tree.build_tree::(IdGetterImpl) .build(); + assert!(r.is_ok()); - let r = tree.build_tree::(IdGetterImpl) - .build(); + let c = tree.elements.iter() + .filter(|element| element.parent_idx.is_none()) + .count(); + assert_eq!(c, 1); - assert!(r.is_ok()); + let c = tree.elements.iter() + .filter(|element| element.childs_indexes.is_empty()) + .count(); + assert_eq!(c, 1); } } -- cgit v1.2.3