Add tests for child parent lookup and fix parent lookup fn (#544)
This commit is contained in:
parent
643bcef542
commit
0077c9b6a5
|
@ -74,7 +74,7 @@ impl Tree {
|
||||||
} else {
|
} else {
|
||||||
self.committee_id_to_index
|
self.committee_id_to_index
|
||||||
.get(committee_id)
|
.get(committee_id)
|
||||||
.map(|&idx| &self.inner_committees[(idx / 2).saturating_sub(1)])
|
.map(|&idx| &self.inner_committees[(idx - 1) / 2])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,4 +185,58 @@ mod tests {
|
||||||
|
|
||||||
assert_eq!(tree.child_committees(root), (Some(one), Some(two)));
|
assert_eq!(tree.child_committees(root), (Some(one), Some(two)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_carnot_tree_leaf_parents() {
|
||||||
|
let nodes: Vec<_> = (0..10).map(|i| NodeId::new([i as u8; 32])).collect();
|
||||||
|
let tree = Tree::new(&nodes, 7);
|
||||||
|
|
||||||
|
// Helper function to get nodes from a committee.
|
||||||
|
fn get_nodes_from_committee(tree: &Tree, committee: &CommitteeId) -> Vec<NodeId> {
|
||||||
|
tree.committee_by_committee_id(committee)
|
||||||
|
.unwrap()
|
||||||
|
.iter()
|
||||||
|
.cloned()
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function to test committee and parent relationship.
|
||||||
|
fn test_committee_parent(tree: &Tree, child: &CommitteeId, parent: &CommitteeId) {
|
||||||
|
let child_nodes = get_nodes_from_committee(tree, child);
|
||||||
|
let node_comm = tree.committee_by_member_id(&child_nodes[0]).unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
node_comm.id::<blake2::Blake2b<digest::typenum::U32>>(),
|
||||||
|
*child
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
tree.parent_committee_from_member_id(&child_nodes[0])
|
||||||
|
.map(|c| c.id::<blake2::Blake2b<digest::typenum::U32>>()),
|
||||||
|
Some(*parent)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// (Upper Committee, (Leaf 1, Leaf 2))
|
||||||
|
let test_cases = [
|
||||||
|
(
|
||||||
|
&tree.inner_committees[1],
|
||||||
|
(
|
||||||
|
Some(&tree.inner_committees[3]),
|
||||||
|
Some(&tree.inner_committees[4]),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
&tree.inner_committees[2],
|
||||||
|
(
|
||||||
|
Some(&tree.inner_committees[5]),
|
||||||
|
Some(&tree.inner_committees[6]),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
];
|
||||||
|
test_cases.iter().for_each(|tcase| {
|
||||||
|
let child_comm = tree.child_committees(tcase.0);
|
||||||
|
assert_eq!(child_comm, tcase.1);
|
||||||
|
test_committee_parent(&tree, tcase.1 .0.unwrap(), tcase.0);
|
||||||
|
test_committee_parent(&tree, tcase.1 .1.unwrap(), tcase.0);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue