fix even-distribution generation

This commit is contained in:
Qyriad 2024-10-25 17:42:50 -06:00
parent 75355d1d12
commit 0878a01fd1
2 changed files with 6 additions and 3 deletions

View file

@ -25,7 +25,7 @@ fn smt_subtree_even(c: &mut Criterion) {
let entries: Vec<(RpoDigest, Word)> = (0..pair_count) let entries: Vec<(RpoDigest, Word)> = (0..pair_count)
.map(|n| { .map(|n| {
// A single depth-8 subtree can have a maximum of 255 leaves. // 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([ let key = RpoDigest::new([
generate_value(&mut seed), generate_value(&mut seed),
ONE, ONE,
@ -47,6 +47,7 @@ fn smt_subtree_even(c: &mut Criterion) {
}) })
.collect(); .collect();
leaves.sort(); leaves.sort();
leaves.dedup_by_key(|leaf| leaf.0);
leaves leaves
}, },
|leaves| { |leaves| {

View file

@ -597,7 +597,7 @@ mod test {
let entries: Vec<(RpoDigest, Word)> = (0..PAIR_COUNT) let entries: Vec<(RpoDigest, Word)> = (0..PAIR_COUNT)
.map(|i| { .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 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)
@ -606,7 +606,7 @@ mod test {
let control = Smt::with_entries(entries.clone()).unwrap(); let control = Smt::with_entries(entries.clone()).unwrap();
let leaves: Vec<(u64, RpoDigest)> = entries let mut leaves: Vec<(u64, RpoDigest)> = entries
.iter() .iter()
.map(|(key, value)| { .map(|(key, value)| {
let leaf = SmtLeaf::new_single(*key, *value); let leaf = SmtLeaf::new_single(*key, *value);
@ -615,6 +615,8 @@ mod test {
(col, hash) (col, hash)
}) })
.collect(); .collect();
leaves.sort();
leaves.dedup_by_key(|leaf| leaf.0);
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());