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