crate::ix!();
impl TreeDensityMeasurer for Skeleton {
#[instrument(level = "trace", skip(self))]
fn measure_tree_density_distribution(&self) -> Vec<u16> {
let mut distribution = Vec::with_capacity(self.nodes().len());
for node in self.nodes() {
distribution.push(node.leaf_count());
}
distribution
}
}
#[cfg(test)]
mod skeleton_density_measurer_assessment {
use super::*;
#[traced_test]
fn check_density_in_single_node() {
trace!("Testing density distribution with a single LeafHolder node having leaf_count=5.");
let node = SkeletonNodeBuilder::default()
.id(0u16)
.leaf_count(5u16)
.name("root")
.original_key("root")
.build(NodeKind::LeafHolder)
.unwrap();
let skel = SkeletonBuilder::default()
.nodes(vec![node])
.root_id(Some(0u16))
.build()
.unwrap();
let dist = skel.measure_tree_density_distribution();
info!("Density distribution = {:?}", dist);
assert_eq!(dist, vec![5u16]);
}
#[traced_test]
fn check_density_in_multiple_nodes() {
trace!("Testing density distribution in a 2-node scenario where the root is a Dispatch node (leaf_count=ignored) and the child is a LeafHolder with leaf_count=3.");
let root = SkeletonNodeBuilder::default()
.id(0u16)
.leaf_count(2u16) .child_ids(vec![1u16])
.name("root")
.original_key("root")
.build(NodeKind::Dispatch)
.unwrap();
let child = SkeletonNodeBuilder::default()
.id(1u16)
.leaf_count(3u16)
.name("child")
.original_key("child")
.build(NodeKind::LeafHolder)
.unwrap();
let skel = SkeletonBuilder::default()
.nodes(vec![root, child])
.root_id(Some(0u16))
.build()
.unwrap();
let dist = skel.measure_tree_density_distribution();
info!("Density distribution = {:?}", dist);
assert_eq!(dist, vec![0u16, 3u16]);
}
}