Fix chunk index bug with structs
This commit is contained in:
parent
d3309b9f7e
commit
a425beb42a
@ -44,16 +44,14 @@ macro_rules! cached_tree_hash_tests {
|
|||||||
|
|
||||||
let mut rng = XorShiftRng::from_seed([42; 16]);
|
let mut rng = XorShiftRng::from_seed([42; 16]);
|
||||||
|
|
||||||
|
// Test the original hash
|
||||||
let original = $type::random_for_test(&mut rng);
|
let original = $type::random_for_test(&mut rng);
|
||||||
|
|
||||||
let mut hasher = cached_tree_hash::CachedTreeHasher::new(&original).unwrap();
|
let mut hasher = cached_tree_hash::CachedTreeHasher::new(&original).unwrap();
|
||||||
|
|
||||||
assert_eq!(hasher.tree_hash_root().unwrap(), original.tree_hash_root());
|
assert_eq!(hasher.tree_hash_root().unwrap(), original.tree_hash_root());
|
||||||
|
|
||||||
|
// Test the updated hash
|
||||||
let modified = $type::random_for_test(&mut rng);
|
let modified = $type::random_for_test(&mut rng);
|
||||||
|
|
||||||
hasher.update(&modified).unwrap();
|
hasher.update(&modified).unwrap();
|
||||||
|
|
||||||
assert_eq!(hasher.tree_hash_root().unwrap(), modified.tree_hash_root());
|
assert_eq!(hasher.tree_hash_root().unwrap(), modified.tree_hash_root());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -28,7 +28,7 @@ pub trait CachedTreeHash<Item>: TreeHash {
|
|||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub struct CachedTreeHasher {
|
pub struct CachedTreeHasher {
|
||||||
cache: TreeHashCache,
|
pub cache: TreeHashCache,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CachedTreeHasher {
|
impl CachedTreeHasher {
|
||||||
|
@ -423,6 +423,45 @@ fn test_struct_with_two_vecs() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, TreeHash, CachedTreeHash)]
|
||||||
|
pub struct U64AndTwoStructs {
|
||||||
|
pub a: u64,
|
||||||
|
pub b: Inner,
|
||||||
|
pub c: Inner,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_u64_and_two_structs() {
|
||||||
|
let inners = get_inners();
|
||||||
|
|
||||||
|
let variants = vec![
|
||||||
|
U64AndTwoStructs {
|
||||||
|
a: 99,
|
||||||
|
b: inners[0].clone(),
|
||||||
|
c: inners[1].clone(),
|
||||||
|
},
|
||||||
|
U64AndTwoStructs {
|
||||||
|
a: 10,
|
||||||
|
b: inners[2].clone(),
|
||||||
|
c: inners[3].clone(),
|
||||||
|
},
|
||||||
|
U64AndTwoStructs {
|
||||||
|
a: 0,
|
||||||
|
b: inners[1].clone(),
|
||||||
|
c: inners[1].clone(),
|
||||||
|
},
|
||||||
|
U64AndTwoStructs {
|
||||||
|
a: 0,
|
||||||
|
b: inners[1].clone(),
|
||||||
|
c: inners[1].clone(),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
for v in &variants {
|
||||||
|
test_routine(v.clone(), variants.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, TreeHash, CachedTreeHash)]
|
#[derive(Clone, Debug, TreeHash, CachedTreeHash)]
|
||||||
pub struct Inner {
|
pub struct Inner {
|
||||||
pub a: u64,
|
pub a: u64,
|
||||||
|
@ -102,6 +102,8 @@ pub fn subtree_derive(input: TokenStream) -> TokenStream {
|
|||||||
// Iterate through the internal nodes, updating them if their children have changed.
|
// Iterate through the internal nodes, updating them if their children have changed.
|
||||||
cache.update_internal_nodes(&overlay)?;
|
cache.update_internal_nodes(&overlay)?;
|
||||||
|
|
||||||
|
cache.chunk_index = overlay.next_node();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user