Skip to content

Commit e3ebcf7

Browse files
starknet_os: refactor cairo runner utils
1 parent 42f2e3c commit e3ebcf7

File tree

4 files changed

+74
-34
lines changed

4 files changed

+74
-34
lines changed

crates/starknet_os/src/test_utils/cairo_runner.rs

Lines changed: 58 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ fn get_return_values(
558558
/// If the endpoint used builtins, the respective returned (implicit) arg is the builtin instance
559559
/// usage, unless the builtin is the output builtin, in which case the arg is the output.
560560
#[allow(clippy::too_many_arguments)]
561-
pub fn run_cairo_0_entry_point(
561+
pub fn initialize_and_run_cairo_0_entry_point(
562562
runner_config: &EntryPointRunnerConfig,
563563
program_bytes: &[u8],
564564
entrypoint: &str,
@@ -568,6 +568,33 @@ pub fn run_cairo_0_entry_point(
568568
hint_locals: HashMap<String, Box<dyn Any>>,
569569
state_reader: Option<DictStateReader>,
570570
) -> Cairo0EntryPointRunnerResult<(Vec<EndpointArg>, Vec<EndpointArg>, CairoRunner)> {
571+
let (mut cairo_runner, program, entrypoint) = initialize_cairo_runner(
572+
runner_config,
573+
program_bytes,
574+
entrypoint,
575+
implicit_args,
576+
hint_locals,
577+
)?;
578+
let (explicit_return_values, implicit_return_values) = run_cairo_0_entrypoint(
579+
entrypoint,
580+
explicit_args,
581+
implicit_args,
582+
state_reader,
583+
&mut cairo_runner,
584+
&program,
585+
runner_config,
586+
expected_explicit_return_values,
587+
)?;
588+
Ok((explicit_return_values, implicit_return_values, cairo_runner))
589+
}
590+
591+
pub fn initialize_cairo_runner(
592+
runner_config: &EntryPointRunnerConfig,
593+
program_bytes: &[u8],
594+
entrypoint: &str,
595+
implicit_args: &[ImplicitArg],
596+
hint_locals: HashMap<String, Box<dyn Any>>,
597+
) -> Cairo0EntryPointRunnerResult<(CairoRunner, Program, String)> {
571598
let mut entrypoint = entrypoint.to_string();
572599
if runner_config.add_main_prefix_to_entrypoint {
573600
info!("Adding __main__ prefix to entrypoint.");
@@ -577,23 +604,6 @@ pub fn run_cairo_0_entry_point(
577604
let program = inject_builtins(program_bytes, implicit_args)?;
578605
info!("Successfully injected builtins into program.");
579606

580-
let (os_hints_config, os_state_input) = (None, None);
581-
let os_block_input = OsBlockInput::default();
582-
let mut hint_processor = SnosHintProcessor::new_for_testing(
583-
state_reader,
584-
&program,
585-
os_hints_config,
586-
&os_block_input,
587-
os_state_input,
588-
)
589-
.unwrap_or_else(|err| panic!("Failed to create SnosHintProcessor: {:?}", err));
590-
info!("Program and Hint processor created successfully.");
591-
592-
// TODO(Amos): Perform complete validations.
593-
perform_basic_validations_on_explicit_args(explicit_args, &program, &entrypoint)?;
594-
perform_basic_validations_on_implicit_args(implicit_args, &program, &entrypoint)?;
595-
info!("Performed basic validations on explicit & implicit args.");
596-
597607
let dynamic_layout_params = None;
598608
let disable_trace_padding = false;
599609
let mut cairo_runner = CairoRunner::new(
@@ -613,6 +623,24 @@ pub fn run_cairo_0_entry_point(
613623
let program_base: Option<Relocatable> = None;
614624
cairo_runner.initialize_segments(program_base);
615625
info!("Created and initialized Cairo runner.");
626+
Ok((cairo_runner, program, entrypoint))
627+
}
628+
629+
#[allow(clippy::too_many_arguments)]
630+
pub fn run_cairo_0_entrypoint(
631+
entrypoint: String,
632+
explicit_args: &[EndpointArg],
633+
implicit_args: &[ImplicitArg],
634+
state_reader: Option<DictStateReader>,
635+
cairo_runner: &mut CairoRunner,
636+
program: &Program,
637+
runner_config: &EntryPointRunnerConfig,
638+
expected_explicit_return_values: &[EndpointArg],
639+
) -> Cairo0EntryPointRunnerResult<(Vec<EndpointArg>, Vec<EndpointArg>)> {
640+
// TODO(Amos): Perform complete validations.
641+
perform_basic_validations_on_explicit_args(explicit_args, program, &entrypoint)?;
642+
perform_basic_validations_on_implicit_args(implicit_args, program, &entrypoint)?;
643+
info!("Performed basic validations on explicit & implicit args.");
616644

617645
let explicit_cairo_args: Vec<CairoArg> =
618646
explicit_args.iter().flat_map(EndpointArg::to_cairo_arg_vec).collect();
@@ -621,6 +649,17 @@ pub fn run_cairo_0_entry_point(
621649
implicit_cairo_args.iter().chain(explicit_cairo_args.iter()).collect();
622650
info!("Converted explicit & implicit args to Cairo args.");
623651

652+
let (os_hints_config, os_state_input) = (None, None);
653+
let os_block_input = OsBlockInput::default();
654+
let mut hint_processor = SnosHintProcessor::new_for_testing(
655+
state_reader,
656+
program,
657+
os_hints_config,
658+
&os_block_input,
659+
os_state_input,
660+
)
661+
.unwrap_or_else(|err| panic!("Failed to create SnosHintProcessor: {:?}", err));
662+
info!("Program and Hint processor created successfully.");
624663
let program_segment_size: Option<usize> = None;
625664
cairo_runner
626665
.run_from_entrypoint(
@@ -638,5 +677,5 @@ pub fn run_cairo_0_entry_point(
638677
info!("Successfully finished running entrypoint {}", entrypoint);
639678
let (implicit_return_values, explicit_return_values) =
640679
get_return_values(implicit_args, expected_explicit_return_values, &cairo_runner.vm)?;
641-
Ok((implicit_return_values, explicit_return_values, cairo_runner))
680+
Ok((implicit_return_values, explicit_return_values))
642681
}

crates/starknet_os/src/test_utils/utils.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use starknet_types_core::felt::Felt;
1212

1313
use crate::hints::hint_implementation::kzg::utils::BASE;
1414
use crate::test_utils::cairo_runner::{
15-
run_cairo_0_entry_point,
15+
initialize_and_run_cairo_0_entry_point,
1616
Cairo0EntryPointRunnerResult,
1717
EndpointArg,
1818
EntryPointRunnerConfig,
@@ -33,16 +33,17 @@ pub fn run_cairo_function_and_check_result(
3333
hint_locals: HashMap<String, Box<dyn Any>>,
3434
) -> Cairo0EntryPointRunnerResult<()> {
3535
let state_reader = None;
36-
let (actual_implicit_retdata, actual_explicit_retdata, _) = run_cairo_0_entry_point(
37-
runner_config,
38-
program_bytes,
39-
function_name,
40-
explicit_args,
41-
implicit_args,
42-
expected_explicit_retdata,
43-
hint_locals,
44-
state_reader,
45-
)?;
36+
let (actual_implicit_retdata, actual_explicit_retdata, _) =
37+
initialize_and_run_cairo_0_entry_point(
38+
runner_config,
39+
program_bytes,
40+
function_name,
41+
explicit_args,
42+
implicit_args,
43+
expected_explicit_retdata,
44+
hint_locals,
45+
state_reader,
46+
)?;
4647
assert_eq!(expected_explicit_retdata, &actual_explicit_retdata);
4748
assert_eq!(expected_implicit_retdata, &actual_implicit_retdata);
4849
Ok(())

crates/starknet_os/src/tests/aliases.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use starknet_api::state::StorageKey;
1414
use starknet_types_core::felt::Felt;
1515

1616
use crate::test_utils::cairo_runner::{
17-
run_cairo_0_entry_point,
17+
initialize_and_run_cairo_0_entry_point,
1818
EndpointArg,
1919
EntryPointRunnerConfig,
2020
ImplicitArg,
@@ -279,7 +279,7 @@ fn allocate_aliases_for_keys_and_replace(
279279
.collect();
280280

281281
let state_reader = DictStateReader { storage_view, ..Default::default() };
282-
let (_, explicit_return_values, _) = run_cairo_0_entry_point(
282+
let (_, explicit_return_values, _) = initialize_and_run_cairo_0_entry_point(
283283
&runner_config,
284284
ALIASES_TEST_BYTES,
285285
entrypoint,

crates/starknet_os/src/tests/bls_field.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use starknet_types_core::felt::Felt;
1414

1515
use crate::hints::hint_implementation::kzg::utils::{split_bigint3, BASE, BLS_PRIME};
1616
use crate::test_utils::cairo_runner::{
17-
run_cairo_0_entry_point,
17+
initialize_and_run_cairo_0_entry_point,
1818
EndpointArg,
1919
ImplicitArg,
2020
PointerArg,
@@ -146,7 +146,7 @@ fn test_horner_eval() {
146146
let implicit_args = [ImplicitArg::Builtin(BuiltinName::range_check)];
147147

148148
let state_reader = None;
149-
let (_, explicit_retdata, _) = run_cairo_0_entry_point(
149+
let (_, explicit_retdata, _) = initialize_and_run_cairo_0_entry_point(
150150
&entrypoint_runner_config,
151151
OS_PROGRAM_BYTES,
152152
"starkware.starknet.core.os.data_availability.bls_field.horner_eval",

0 commit comments

Comments
 (0)