refactor test_build_subtree_from_leaves()

This commit is contained in:
Qyriad 2024-10-29 12:29:20 -06:00
parent 98e5e0a5b2
commit 1bc790586a

View file

@ -683,32 +683,29 @@ mod test {
assert_eq!(control_subtree_leaves, test_subtree_leaves); assert_eq!(control_subtree_leaves, test_subtree_leaves);
} }
#[test] // Helper for the below tests.
fn test_build_subtree_from_leaves() { fn generate_entries(pair_count: u64) -> Vec<(RpoDigest, Word)> {
const PAIR_COUNT: u64 = u64::pow(2, 8); (0..pair_count)
let entries: Vec<(RpoDigest, Word)> = (0..PAIR_COUNT)
.map(|i| { .map(|i| {
let leaf_index = ((i as f64 / PAIR_COUNT as f64) * (PAIR_COUNT as f64)) as u64; let leaf_index = ((i as f64 / pair_count as f64) * (pair_count as f64)) as u64;
let key = RpoDigest::new([ONE, ONE, Felt::new(i), Felt::new(leaf_index)]); let key = RpoDigest::new([ONE, ONE, Felt::new(i), Felt::new(leaf_index)]);
let value = [ONE, ONE, ONE, Felt::new(i)]; let value = [ONE, ONE, ONE, Felt::new(i)];
(key, value) (key, value)
}) })
.collect(); .collect()
}
#[test]
fn test_build_subtree_from_leaves() {
// A single subtree's worth of leaves.
const PAIR_COUNT: u64 = 256;
let entries = generate_entries(PAIR_COUNT);
let control = Smt::with_entries(entries.clone()).unwrap(); let control = Smt::with_entries(entries.clone()).unwrap();
let mut leaves: Vec<SubtreeLeaf> = entries // `entries` should already be sorted by nature of how we constructed it.
.iter() let leaves = Smt::sorted_pairs_to_leaves(entries).subtrees;
.map(|(key, value)| {
let leaf = SmtLeaf::new_single(*key, *value);
let col = leaf.index().index.value();
let hash = leaf.hash();
SubtreeLeaf { col, hash }
})
.collect();
leaves.sort();
leaves.dedup_by_key(|leaf| leaf.col);
let (first_subtree, _) = Smt::build_subtree(leaves, SMT_DEPTH); let (first_subtree, _) = Smt::build_subtree(leaves, SMT_DEPTH);
assert!(!first_subtree.is_empty()); assert!(!first_subtree.is_empty());