Skip to content

Commit 0b3d07f

Browse files
test(blockifier): test summery add builtin counters (#7480)
1 parent fd501d5 commit 0b3d07f

File tree

1 file changed

+64
-10
lines changed

1 file changed

+64
-10
lines changed

crates/blockifier/src/transaction/objects_test.rs

Lines changed: 64 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
use std::collections::HashMap;
2-
1+
use cairo_vm::types::builtin_name::BuiltinName;
32
use rstest::rstest;
43
use starknet_api::core::{ClassHash, ContractAddress, EthAddress};
54
use starknet_api::execution_resources::GasAmount;
@@ -9,6 +8,7 @@ use starknet_api::{class_hash, contract_address, storage_key};
98
use starknet_types_core::felt::Felt;
109

1110
use crate::execution::call_info::{
11+
BuiltinCounterMap,
1212
CallExecution,
1313
CallInfo,
1414
ChargedResources,
@@ -30,6 +30,8 @@ pub struct TestExecutionSummary {
3030
pub class_hash: ClassHash,
3131
pub storage_address: ContractAddress,
3232
pub storage_key: StorageKey,
33+
pub builtin_counters: BuiltinCounterMap,
34+
pub inner_builtin_counters: BuiltinCounterMap,
3335
}
3436

3537
impl TestExecutionSummary {
@@ -48,9 +50,19 @@ impl TestExecutionSummary {
4850
class_hash,
4951
storage_address: contract_address!(storage_address),
5052
storage_key: storage_key!(storage_key),
53+
builtin_counters: BuiltinCounterMap::new(),
54+
inner_builtin_counters: BuiltinCounterMap::new(),
5155
}
5256
}
5357

58+
pub fn update_builtin_counters(&mut self, builtin_counters: &BuiltinCounterMap) {
59+
self.builtin_counters.extend(builtin_counters);
60+
}
61+
62+
pub fn update_inner_builtin_counters(&mut self, inner_builtin_counters: &BuiltinCounterMap) {
63+
self.inner_builtin_counters.extend(inner_builtin_counters);
64+
}
65+
5466
pub fn to_call_info(&self) -> CallInfo {
5567
CallInfo {
5668
call: CallEntryPoint {
@@ -73,6 +85,8 @@ impl TestExecutionSummary {
7385
..Default::default()
7486
},
7587
accessed_storage_keys: vec![self.storage_key].into_iter().collect(),
88+
inner_calls: vec![inner_call_info(&self.inner_builtin_counters)],
89+
builtin_counters: self.builtin_counters.clone(),
7690
..Default::default()
7791
}
7892
}
@@ -85,6 +99,13 @@ fn shared_call_info() -> CallInfo {
8599
}
86100
}
87101

102+
fn inner_call_info(builtin_counters: &BuiltinCounterMap) -> CallInfo {
103+
CallInfo {
104+
call: CallEntryPoint { class_hash: Some(class_hash!("0x1")), ..Default::default() },
105+
builtin_counters: builtin_counters.clone(),
106+
..Default::default()
107+
}
108+
}
88109
fn call_info_with_x_events(n_events: usize, n_inner_calls: usize) -> CallInfo {
89110
CallInfo {
90111
execution: CallExecution {
@@ -176,17 +197,47 @@ fn test_events_counter_in_tx_execution_info_with_inner_call_info(#[case] n_execu
176197
);
177198
}
178199

200+
// This function gets a set of builtins for the outer and inner calls, updates the
201+
// param builtin counter and returns the expected values for the summary test.
202+
fn update_builtin_counters_for_summary_test(
203+
params: &mut TestExecutionSummary,
204+
outer_poseidon: usize,
205+
outer_bitwise: usize,
206+
inner_pedersen: usize,
207+
inner_bitwise: usize,
208+
) -> (usize, usize, usize) {
209+
params.update_builtin_counters(&BuiltinCounterMap::from_iter([
210+
(BuiltinName::poseidon, outer_poseidon),
211+
(BuiltinName::bitwise, outer_bitwise),
212+
]));
213+
214+
params.update_inner_builtin_counters(&BuiltinCounterMap::from_iter([
215+
(BuiltinName::pedersen, inner_pedersen),
216+
(BuiltinName::bitwise, inner_bitwise),
217+
]));
218+
(outer_poseidon, inner_pedersen, outer_bitwise + inner_bitwise)
219+
}
220+
179221
#[rstest]
180222
#[case(
181-
TestExecutionSummary::new(10, 1, 2, class_hash!("0x1"), "0x1", "0x1"),
182-
TestExecutionSummary::new(20, 2, 3, class_hash!("0x2"), "0x2", "0x2"),
183-
TestExecutionSummary::new(30, 3, 4, class_hash!("0x3"), "0x3", "0x3")
223+
&mut TestExecutionSummary::new(10, 1, 2, class_hash!("0x1"), "0x1", "0x1"),
224+
&mut TestExecutionSummary::new(20, 2, 3, class_hash!("0x2"), "0x2", "0x2"),
225+
&mut TestExecutionSummary::new(30, 3, 4, class_hash!("0x3"), "0x3", "0x3")
184226
)]
185227
fn test_summarize(
186-
#[case] validate_params: TestExecutionSummary,
187-
#[case] execute_params: TestExecutionSummary,
188-
#[case] fee_transfer_params: TestExecutionSummary,
228+
#[case] validate_params: &mut TestExecutionSummary,
229+
#[case] execute_params: &mut TestExecutionSummary,
230+
#[case] fee_transfer_params: &mut TestExecutionSummary,
189231
) {
232+
let (validate_poseidon, validate_pedersen, validate_bitwise) =
233+
update_builtin_counters_for_summary_test(validate_params, 1, 5, 2, 6);
234+
235+
let (execute_poseidon, execute_pedersen, execute_bitwise) =
236+
update_builtin_counters_for_summary_test(execute_params, 1, 4, 2, 1);
237+
238+
let (fee_transfer_poseidon, fee_transfer_pedersen, fee_transfer_bitwise) =
239+
update_builtin_counters_for_summary_test(fee_transfer_params, 1, 2, 3, 4);
240+
190241
let validate_call_info = validate_params.to_call_info();
191242
let execute_call_info = execute_params.to_call_info();
192243
let fee_transfer_call_info = fee_transfer_params.to_call_info();
@@ -232,8 +283,11 @@ fn test_summarize(
232283
total_event_keys: 0,
233284
total_event_data_size: 0,
234285
},
235-
// TODO(Meshi): Change it to a relevant value for this test.
236-
builtin_counters: HashMap::new(),
286+
builtin_counters: BuiltinCounterMap::from_iter([
287+
(BuiltinName::pedersen, validate_pedersen + execute_pedersen + fee_transfer_pedersen),
288+
(BuiltinName::poseidon, validate_poseidon + execute_poseidon + fee_transfer_poseidon),
289+
(BuiltinName::bitwise, validate_bitwise + execute_bitwise + fee_transfer_bitwise),
290+
]),
237291
};
238292

239293
// Call the summarize method.

0 commit comments

Comments
 (0)