Skip to content

Commit 7a5c036

Browse files
authored
chore: port reth tests for increments (#365)
1 parent 3c4805a commit 7a5c036

1 file changed

Lines changed: 96 additions & 0 deletions

File tree

crates/evm/src/block/state_changes.rs

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)