summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-02-23 11:11:34 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-02-23 11:11:34 +0100
commit6b908aacd256cf26aad0d724180c7a30fe658473 (patch)
tree898a9921f938c51b671e4cb3bf29a670618bd84b
parent3cc8bc8ec78b093f69da46a238070a7e56e00a0e (diff)
Add tests whether linking results in only root and leave unlinkedlibimagmail/tree-rewrite-mailtree
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--lib/etc/libimagutil/src/tree.rs55
1 files 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<T>);
+
+
#[cfg(test)]
mod tests {
use super::*;
+ struct IdGetterImpl;
+ impl IdGetter<usize> for IdGetterImpl {
+ type ID = usize;
+
+ fn get_id_for_node(&self, node: &usize) -> Result<Self::ID> {
+ Ok(*node)
+ }
+
+ fn get_id_for_parent_of(&self, node: &usize) -> Result<Option<Self::ID>> {
+ 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<usize> for IdGetterImpl {
- type ID = usize;
+ let r = tree.build_tree::<usize, IdGetterImpl>(IdGetterImpl).build();
+ assert!(r.is_ok());
+ }
- fn get_id_for_node(&self, node: &usize) -> Result<Self::ID> {
- Ok(*node)
- }
- fn get_id_for_parent_of(&self, node: &usize) -> Result<Option<Self::ID>> {
- 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::<usize, IdGetterImpl>(IdGetterImpl) .build();
+ assert!(r.is_ok());
- let r = tree.build_tree::<usize, IdGetterImpl>(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);
}
}