diff --git a/benches/smt-subtree.rs b/benches/smt-subtree.rs index c469b14..df97f79 100644 --- a/benches/smt-subtree.rs +++ b/benches/smt-subtree.rs @@ -25,7 +25,7 @@ fn smt_subtree_even(c: &mut Criterion) { let entries: Vec<(RpoDigest, Word)> = (0..pair_count) .map(|n| { // A single depth-8 subtree can have a maximum of 255 leaves. - let leaf_index = (n / pair_count) * 255; + let leaf_index = ((n as f64 / pair_count as f64) * 255.0) as u64; let key = RpoDigest::new([ generate_value(&mut seed), ONE, @@ -47,6 +47,7 @@ fn smt_subtree_even(c: &mut Criterion) { }) .collect(); leaves.sort(); + leaves.dedup_by_key(|leaf| leaf.0); leaves }, |leaves| { diff --git a/src/merkle/smt/mod.rs b/src/merkle/smt/mod.rs index c05bf9c..ca3c492 100644 --- a/src/merkle/smt/mod.rs +++ b/src/merkle/smt/mod.rs @@ -597,7 +597,7 @@ mod test { let entries: Vec<(RpoDigest, Word)> = (0..PAIR_COUNT) .map(|i| { - let leaf_index = u64::MAX / (i + 1); + let leaf_index = ((i as f64 / PAIR_COUNT as f64) * 255.0) as u64; let key = RpoDigest::new([ONE, ONE, Felt::new(i), Felt::new(leaf_index)]); let value = [ONE, ONE, ONE, Felt::new(i)]; (key, value) @@ -606,7 +606,7 @@ mod test { let control = Smt::with_entries(entries.clone()).unwrap(); - let leaves: Vec<(u64, RpoDigest)> = entries + let mut leaves: Vec<(u64, RpoDigest)> = entries .iter() .map(|(key, value)| { let leaf = SmtLeaf::new_single(*key, *value); @@ -615,6 +615,8 @@ mod test { (col, hash) }) .collect(); + leaves.sort(); + leaves.dedup_by_key(|leaf| leaf.0); let first_subtree = Smt::build_subtree(leaves, SMT_DEPTH); assert!(!first_subtree.is_empty());