1- use std:: collections:: HashMap ;
2-
1+ use cairo_vm:: types:: builtin_name:: BuiltinName ;
32use rstest:: rstest;
43use starknet_api:: core:: { ClassHash , ContractAddress , EthAddress } ;
54use starknet_api:: execution_resources:: GasAmount ;
@@ -9,6 +8,7 @@ use starknet_api::{class_hash, contract_address, storage_key};
98use starknet_types_core:: felt:: Felt ;
109
1110use 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
3537impl 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+ }
88109fn 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) ]
185227fn 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