@@ -125,3 +125,99 @@ where
125125 } )
126126 . collect :: < Result < EvmState , _ > > ( )
127127}
128+
129+ #[ cfg( test) ]
130+ mod tests {
131+ use alloy_primitives:: { address, Address , U256 } ;
132+ use revm:: {
133+ database:: { CacheDB , EmptyDB , State } ,
134+ primitives:: { HashMap , KECCAK_EMPTY } ,
135+ state:: AccountInfo ,
136+ } ;
137+
138+ use crate :: block:: state_changes:: balance_increment_state;
139+
140+ fn setup_state_with_account (
141+ addr : Address ,
142+ balance : u128 ,
143+ nonce : u64 ,
144+ ) -> State < CacheDB < EmptyDB > > {
145+ let db = CacheDB :: < EmptyDB > :: default ( ) ;
146+ let mut state = State :: builder ( ) . with_database ( db) . with_bundle_update ( ) . build ( ) ;
147+
148+ let account_info = AccountInfo {
149+ balance : U256 :: from ( balance) ,
150+ nonce,
151+ code_hash : KECCAK_EMPTY ,
152+ code : None ,
153+ account_id : None ,
154+ } ;
155+ state. insert_account ( addr, account_info) ;
156+ state
157+ }
158+
159+ #[ test]
160+ fn test_balance_increment_state_empty_increments_map ( ) {
161+ let mut state = State :: builder ( )
162+ . with_database ( CacheDB :: < EmptyDB > :: default ( ) )
163+ . with_bundle_update ( )
164+ . build ( ) ;
165+
166+ let increments = HashMap :: default ( ) ;
167+ let result = balance_increment_state ( & increments, & mut state) . unwrap ( ) ;
168+ assert ! ( result. is_empty( ) , "Empty increments map should return empty state" ) ;
169+ }
170+
171+ #[ test]
172+ fn test_balance_increment_state_multiple_valid_increments ( ) {
173+ let addr1 = address ! ( "0x1000000000000000000000000000000000000000" ) ;
174+ let addr2 = address ! ( "0x2000000000000000000000000000000000000000" ) ;
175+
176+ let mut state = setup_state_with_account ( addr1, 100 , 1 ) ;
177+
178+ let account2 = AccountInfo {
179+ balance : U256 :: from ( 200 ) ,
180+ nonce : 1 ,
181+ code_hash : KECCAK_EMPTY ,
182+ code : None ,
183+ account_id : None ,
184+ } ;
185+ state. insert_account ( addr2, account2) ;
186+
187+ let mut increments = HashMap :: default ( ) ;
188+ increments. insert ( addr1, 50 ) ;
189+ increments. insert ( addr2, 100 ) ;
190+
191+ let result = balance_increment_state ( & increments, & mut state) . unwrap ( ) ;
192+
193+ assert_eq ! ( result. len( ) , 2 ) ;
194+ assert_eq ! ( result. get( & addr1) . unwrap( ) . info. balance, U256 :: from( 150 ) ) ;
195+ assert_eq ! ( result. get( & addr2) . unwrap( ) . info. balance, U256 :: from( 300 ) ) ;
196+ }
197+
198+ #[ test]
199+ fn test_balance_increment_state_mixed_zero_and_nonzero_increments ( ) {
200+ let addr1 = address ! ( "0x1000000000000000000000000000000000000000" ) ;
201+ let addr2 = address ! ( "0x2000000000000000000000000000000000000000" ) ;
202+
203+ let mut state = setup_state_with_account ( addr1, 100 , 1 ) ;
204+
205+ let account2 = AccountInfo {
206+ balance : U256 :: from ( 200 ) ,
207+ nonce : 1 ,
208+ code_hash : KECCAK_EMPTY ,
209+ code : None ,
210+ account_id : None ,
211+ } ;
212+ state. insert_account ( addr2, account2) ;
213+
214+ let mut increments = HashMap :: default ( ) ;
215+ increments. insert ( addr1, 0 ) ;
216+ increments. insert ( addr2, 100 ) ;
217+
218+ let result = balance_increment_state ( & increments, & mut state) . unwrap ( ) ;
219+
220+ assert_eq ! ( result. get( & addr1) . unwrap( ) . info. balance, U256 :: from( 100 ) ) ;
221+ assert_eq ! ( result. get( & addr2) . unwrap( ) . info. balance, U256 :: from( 300 ) ) ;
222+ }
223+ }
0 commit comments