From 3dcd9f21bbc6ff481b3b433aeb08d91ab5138692 Mon Sep 17 00:00:00 2001 From: Karol Bisztyga Date: Wed, 10 May 2023 11:55:16 +0200 Subject: [PATCH 1/3] init --- crates/cairo-lang-protostar/src/cli.rs | 4 ++-- crates/cairo-lang-protostar/src/lib.rs | 4 ++-- crates/cairo-lang-protostar/src/test_collector/mod.rs | 7 ++----- crates/cairo-lang-python-bindings/src/lib.rs | 8 ++++---- crates/cairo-lang-test-runner/src/lib.rs | 2 +- 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/crates/cairo-lang-protostar/src/cli.rs b/crates/cairo-lang-protostar/src/cli.rs index aaf56842489..e77f0c20134 100644 --- a/crates/cairo-lang-protostar/src/cli.rs +++ b/crates/cairo-lang-protostar/src/cli.rs @@ -19,9 +19,9 @@ struct Args { fn main() -> anyhow::Result<()> { let args = Args::parse(); let builtins = vec![String::from("GasBuiltin"), String::from("Pedersen"), String::from("RangeCheck"), String::from("bitwise"), String::from("ec_op")]; - let (sierra_code_opt, collected) = collect_tests(&args.file, None, None, Some(builtins.iter().collect()))?; + let (sierra_program, collected) = collect_tests(&args.file, None, None, Some(builtins.iter().collect()))?; - let sierra_code = sierra_code_opt.ok_or(anyhow!("Expected sierra code"))?; + let sierra_code = sierra_program.to_string(); if let Some(out_path) = args.output_sierra { fs::write(out_path, format!("{}", sierra_code)).context("Failed to write output.")?; diff --git a/crates/cairo-lang-protostar/src/lib.rs b/crates/cairo-lang-protostar/src/lib.rs index 70ad47ac435..f96a0acb280 100644 --- a/crates/cairo-lang-protostar/src/lib.rs +++ b/crates/cairo-lang-protostar/src/lib.rs @@ -10,9 +10,9 @@ pub mod test_collector; pub fn build_protostar_casm( collected_tests: &Vec, - contents: &str, + sierra_contents: &str, ) -> anyhow::Result { - let program: Program = ProgramParser::new().parse(&contents).unwrap(); + let program: Program = ProgramParser::new().parse(&sierra_contents).unwrap(); let casm_generator = match SierraCasmGenerator::new(program) { Ok(casm_generator) => casm_generator, diff --git a/crates/cairo-lang-protostar/src/test_collector/mod.rs b/crates/cairo-lang-protostar/src/test_collector/mod.rs index b82d6e2d44e..f541c7807c7 100644 --- a/crates/cairo-lang-protostar/src/test_collector/mod.rs +++ b/crates/cairo-lang-protostar/src/test_collector/mod.rs @@ -216,7 +216,7 @@ pub fn collect_tests( output_path: Option<&String>, maybe_cairo_paths: Option>, maybe_builtins: Option>, -) -> Result<(Option, Vec)> { +) -> Result<(Program, Vec)> { // code taken from crates/cairo-lang-test-runner/src/lib.rs let db = &mut { let mut b = RootDatabase::builder(); @@ -292,13 +292,10 @@ pub fn collect_tests( validate_tests(sierra_program.clone(), &collected_tests, builtins) .context("Test validation failed")?; - let mut result_contents = None; if let Some(path) = output_path { fs::write(path, &sierra_program.to_string()).context("Failed to write output")?; - } else { - result_contents = Some(sierra_program.to_string()); } - Ok((result_contents, collected_tests)) + Ok((sierra_program, collected_tests)) } fn validate_tests( diff --git a/crates/cairo-lang-python-bindings/src/lib.rs b/crates/cairo-lang-python-bindings/src/lib.rs index ddd77dc1885..feb5f868d2e 100644 --- a/crates/cairo-lang-python-bindings/src/lib.rs +++ b/crates/cairo-lang-python-bindings/src/lib.rs @@ -118,15 +118,15 @@ fn compile_starknet_contract_sierra_to_casm_from_path( Ok(Some(casm)) } -// returns tuple[sierra if no output_path, list[test_name, test_config]] +// returns tuple[sierra, list[test_name, test_config]] #[pyfunction] fn collect_tests( input_path: String, output_path: Option, maybe_cairo_paths: Option>, maybe_builtins: Option>, -) -> PyResult<(Option, Vec)> { - let (sierra_code, collected) = internal_collect_tests( +) -> PyResult<(String, Vec)> { + let (sierra_program, collected) = internal_collect_tests( &input_path, output_path.as_ref(), maybe_cairo_paths.as_ref().map(|a| a.iter().map(|b| b).collect::>()), @@ -140,7 +140,7 @@ fn collect_tests( })?; let external_collected = collected.iter().map(|c| (c.name.clone(), c.available_gas)).collect(); - Ok((sierra_code, external_collected)) + Ok((sierra_program.to_string(), external_collected)) } #[pyfunction] diff --git a/crates/cairo-lang-test-runner/src/lib.rs b/crates/cairo-lang-test-runner/src/lib.rs index d661e3d7e99..0731399c97c 100644 --- a/crates/cairo-lang-test-runner/src/lib.rs +++ b/crates/cairo-lang-test-runner/src/lib.rs @@ -228,7 +228,7 @@ pub struct TestsSummary { } /// Runs the tests and process the results for a summary. -fn run_tests( +pub fn run_tests( named_tests: Vec<(String, TestConfig)>, sierra_program: cairo_lang_sierra::program::Program, function_set_costs: OrderedHashMap>, From f1031af68655c1dc35b5cb5e2d643eac0b5e5571 Mon Sep 17 00:00:00 2001 From: Karol Bisztyga Date: Thu, 11 May 2023 11:28:09 +0200 Subject: [PATCH 2/3] fmt --- corelib/src/cheatcodes.cairo | 12 ++++++------ corelib/src/protostar_print.cairo | 16 ++++++++-------- crates/cairo-lang-casm/src/hints/mod.rs | 2 -- crates/cairo-lang-protostar/src/cli.rs | 11 +++++++++-- .../src/test_collector/mod.rs | 15 +++++++-------- crates/cairo-lang-runner/src/casm_run/mod.rs | 7 +++---- .../src/cheatcodes_libfunc_cost_base.rs | 4 +--- .../src/core_libfunc_cost_base.rs | 6 +++--- crates/cairo-lang-sierra-gas/src/lib.rs | 2 +- 9 files changed, 38 insertions(+), 37 deletions(-) diff --git a/corelib/src/cheatcodes.cairo b/corelib/src/cheatcodes.cairo index 15548909cf7..75c7ef89d00 100644 --- a/corelib/src/cheatcodes.cairo +++ b/corelib/src/cheatcodes.cairo @@ -36,7 +36,7 @@ impl RevertedTransactionImpl of RevertedTransactionTrait { extern fn invoke_impl( contract_address: felt252, function_name: felt252, calldata: Array:: -) -> Result::<(), Array::> nopanic; +) -> Result::<(), Array> nopanic; fn invoke( contract_address: felt252, function_name: felt252, calldata: Array:: @@ -64,7 +64,7 @@ extern fn deploy_impl( prepared_contract_address: felt252, prepared_class_hash: felt252, prepared_constructor_calldata: Array:: -) -> Result::> nopanic; +) -> Result::> nopanic; fn deploy(prepared_contract: PreparedContract) -> Result:: nopanic { let PreparedContract{contract_address, class_hash, constructor_calldata } = prepared_contract; @@ -161,15 +161,15 @@ fn deploy_contract_cairo0( extern fn call_impl( contract: felt252, function_name: felt252, calldata: Array:: -) -> Result::, Array::> nopanic; +) -> Result::, Array> nopanic; fn call( contract: felt252, function_name: felt252, calldata: Array:: -) -> Result::, RevertedTransaction> nopanic { +) -> Result::, RevertedTransaction> nopanic { match call_impl(contract, function_name, calldata) { - Result::Ok(x) => Result::, RevertedTransaction>::Ok(x), - Result::Err(x) => Result::, + Result::Ok(x) => Result::, RevertedTransaction>::Ok(x), + Result::Err(x) => Result::, RevertedTransaction>::Err(RevertedTransaction { panic_data: x }) } } diff --git a/corelib/src/protostar_print.cairo b/corelib/src/protostar_print.cairo index 1949d1a8698..d38df6eb637 100644 --- a/corelib/src/protostar_print.cairo +++ b/corelib/src/protostar_print.cairo @@ -15,13 +15,13 @@ trait PrintTrait { fn print(self: T); } -impl Felt252PrintImpl of PrintTrait:: { +impl Felt252PrintImpl of PrintTrait { fn print(self: felt252) { print_felt252(self); } } -impl BoolPrintImpl of PrintTrait:: { +impl BoolPrintImpl of PrintTrait { fn print(self: bool) { if self { 'true'.print(); @@ -31,38 +31,38 @@ impl BoolPrintImpl of PrintTrait:: { } } -impl ContractAddressPrintImpl of PrintTrait:: { +impl ContractAddressPrintImpl of PrintTrait { fn print(self: starknet::ContractAddress) { Into::<_, felt252>::into(self).print(); } } -impl U8PrintImpl of PrintTrait:: { +impl U8PrintImpl of PrintTrait { fn print(self: u8) { Into::<_, felt252>::into(self).print(); } } -impl U64PrintImpl of PrintTrait:: { +impl U64PrintImpl of PrintTrait { fn print(self: u64) { Into::<_, felt252>::into(self).print(); } } -impl U128PrintImpl of PrintTrait:: { +impl U128PrintImpl of PrintTrait { fn print(self: u128) { Into::<_, felt252>::into(self).print(); } } -impl U256PrintImpl of PrintTrait:: { +impl U256PrintImpl of PrintTrait { fn print(self: u256) { Into::<_, felt252>::into(self.low).print(); Into::<_, felt252>::into(self.high).print(); } } -impl ArrayGenericPrintImpl of PrintTrait::> { +impl ArrayGenericPrintImpl of PrintTrait> { fn print(mut self: Array::) { print(self); } diff --git a/crates/cairo-lang-casm/src/hints/mod.rs b/crates/cairo-lang-casm/src/hints/mod.rs index b8c44536a65..03e545c3cbc 100644 --- a/crates/cairo-lang-casm/src/hints/mod.rs +++ b/crates/cairo-lang-casm/src/hints/mod.rs @@ -135,7 +135,6 @@ pub enum ProtostarHint { start: ResOperand, end: ResOperand, }, - } // Represents a cairo core hint. @@ -1033,7 +1032,6 @@ impl Display for ProtostarHint { ResOperandFormatter(start), ResOperandFormatter(end), ), - } } } diff --git a/crates/cairo-lang-protostar/src/cli.rs b/crates/cairo-lang-protostar/src/cli.rs index e77f0c20134..e9bf9337707 100644 --- a/crates/cairo-lang-protostar/src/cli.rs +++ b/crates/cairo-lang-protostar/src/cli.rs @@ -18,8 +18,15 @@ struct Args { fn main() -> anyhow::Result<()> { let args = Args::parse(); - let builtins = vec![String::from("GasBuiltin"), String::from("Pedersen"), String::from("RangeCheck"), String::from("bitwise"), String::from("ec_op")]; - let (sierra_program, collected) = collect_tests(&args.file, None, None, Some(builtins.iter().collect()))?; + let builtins = vec![ + String::from("GasBuiltin"), + String::from("Pedersen"), + String::from("RangeCheck"), + String::from("bitwise"), + String::from("ec_op"), + ]; + let (sierra_program, collected) = + collect_tests(&args.file, None, None, Some(builtins.iter().collect()))?; let sierra_code = sierra_program.to_string(); diff --git a/crates/cairo-lang-protostar/src/test_collector/mod.rs b/crates/cairo-lang-protostar/src/test_collector/mod.rs index f541c7807c7..32e3d6c229e 100644 --- a/crates/cairo-lang-protostar/src/test_collector/mod.rs +++ b/crates/cairo-lang-protostar/src/test_collector/mod.rs @@ -11,12 +11,12 @@ use cairo_lang_debug::DebugWithDb; use cairo_lang_defs::ids::{FreeFunctionId, FunctionWithBodyId, ModuleItemId}; use cairo_lang_defs::plugin::PluginDiagnostic; use cairo_lang_diagnostics::ToOption; -use cairo_lang_filesystem::cfg::{CfgSet, Cfg}; +use cairo_lang_filesystem::cfg::{Cfg, CfgSet}; use cairo_lang_filesystem::ids::CrateId; +use cairo_lang_lowering::ids::ConcreteFunctionWithBodyId; use cairo_lang_semantic::db::SemanticGroup; use cairo_lang_semantic::items::functions::GenericFunctionId; use cairo_lang_semantic::{ConcreteFunction, FunctionLongId}; -use cairo_lang_lowering::ids::ConcreteFunctionWithBodyId; use cairo_lang_sierra::extensions::enm::EnumType; use cairo_lang_sierra::extensions::NamedType; use cairo_lang_sierra::program::{GenericArg, Program}; @@ -24,10 +24,10 @@ use cairo_lang_sierra_generator::db::SierraGenGroup; use cairo_lang_sierra_generator::replace_ids::replace_sierra_ids_in_program; use cairo_lang_starknet::plugin::StarkNetPlugin; use cairo_lang_syntax::attribute::structured::{Attribute, AttributeArg, AttributeArgVariant}; -use cairo_lang_syntax::node::db::SyntaxGroup; use cairo_lang_syntax::node::ast; -use cairo_lang_utils::OptionHelper; +use cairo_lang_syntax::node::db::SyntaxGroup; use cairo_lang_test_runner::plugin::TestPlugin; +use cairo_lang_utils::OptionHelper; use itertools::Itertools; use num_traits::ToPrimitive; @@ -245,11 +245,10 @@ pub fn collect_tests( } let all_tests = find_all_tests(db, main_crate_ids); - let z : Vec = all_tests + let z: Vec = all_tests .iter() - .flat_map(|(func_id, _cfg)| { - ConcreteFunctionWithBodyId::from_no_generics_free(db, *func_id) - }).collect(); + .flat_map(|(func_id, _cfg)| ConcreteFunctionWithBodyId::from_no_generics_free(db, *func_id)) + .collect(); let sierra_program = db .get_sierra_program_for_functions(z) diff --git a/crates/cairo-lang-runner/src/casm_run/mod.rs b/crates/cairo-lang-runner/src/casm_run/mod.rs index f19601b05b0..eaf5d47346d 100644 --- a/crates/cairo-lang-runner/src/casm_run/mod.rs +++ b/crates/cairo-lang-runner/src/casm_run/mod.rs @@ -6,7 +6,7 @@ use ark_ff::fields::{Fp256, MontBackend, MontConfig}; use ark_ff::{Field, PrimeField}; use ark_std::UniformRand; use cairo_felt::{felt_str as felt252_str, Felt252, PRIME_STR}; -use cairo_lang_casm::hints::{CoreHint, DeprecatedHint, Hint, StarknetHint, ProtostarHint}; +use cairo_lang_casm::hints::{CoreHint, DeprecatedHint, Hint, ProtostarHint, StarknetHint}; use cairo_lang_casm::instructions::Instruction; use cairo_lang_casm::operand::{ BinOpOperand, CellRef, DerefOrImmediate, Operation, Register, ResOperand, @@ -311,7 +311,7 @@ impl HintProcessor for CairoHintProcessor<'_> { } Hint::Protostar(hint) => { return execute_protostar_hint(vm, exec_scopes, hint); - }, + } Hint::Starknet(hint) => hint, }; match hint { @@ -735,7 +735,6 @@ impl HintProcessor for CairoHintProcessor<'_> { let end = get_ptr(vm, cell, &offset)?; self.starknet_state.exec_info.tx_info.signature = vm_get_range(vm, start, end)?; } - }; Ok(()) } @@ -1244,7 +1243,7 @@ pub fn execute_core_hint( }; insert_value_to_cellref!(vm, dst, memory_exec_scope.next_address)?; memory_exec_scope.next_address.offset += object_size; - }, + } }; Ok(()) } diff --git a/crates/cairo-lang-sierra-gas/src/cheatcodes_libfunc_cost_base.rs b/crates/cairo-lang-sierra-gas/src/cheatcodes_libfunc_cost_base.rs index 31b8b322073..6b4059be6ab 100644 --- a/crates/cairo-lang-sierra-gas/src/cheatcodes_libfunc_cost_base.rs +++ b/crates/cairo-lang-sierra-gas/src/cheatcodes_libfunc_cost_base.rs @@ -2,9 +2,7 @@ use cairo_lang_sierra::extensions::cheatcodes::CheatcodesConcreteLibFunc; use crate::objects::ConstCost; -pub fn cheatcodes_libfunc_cost_base( - libfunc: &CheatcodesConcreteLibFunc, -) -> Vec { +pub fn cheatcodes_libfunc_cost_base(libfunc: &CheatcodesConcreteLibFunc) -> Vec { let steps = |value| ConstCost { steps: value, ..Default::default() }; match libfunc { CheatcodesConcreteLibFunc::Declare(_) => vec![steps(2), steps(2)], diff --git a/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs b/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs index ea349fb5509..2463336d9b1 100644 --- a/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs +++ b/crates/cairo-lang-sierra-gas/src/core_libfunc_cost_base.rs @@ -36,9 +36,9 @@ use cairo_lang_utils::casts::IntoOrPanic; use cairo_lang_utils::ordered_hash_map::OrderedHashMap; use itertools::{chain, Itertools}; +use crate::cheatcodes_libfunc_cost_base::cheatcodes_libfunc_cost_base; use crate::objects::{BranchCost, ConstCost, CostInfoProvider, PreCost}; use crate::starknet_libfunc_cost_base::starknet_libfunc_cost_base; -use crate::cheatcodes_libfunc_cost_base::cheatcodes_libfunc_cost_base; /// The cost per each unique key in the dictionary. This cost is pre-charged for each access /// (read/write/entry), and the overhead cost is refunded for each repeated access. @@ -318,10 +318,10 @@ pub fn core_libfunc_cost( }, CoreConcreteLibfunc::StarkNet(libfunc) => { starknet_libfunc_cost_base(libfunc).into_iter().map(BranchCost::from).collect() - }, + } CoreConcreteLibfunc::Cheatcodes(libfunc) => { cheatcodes_libfunc_cost_base(libfunc).into_iter().map(BranchCost::from).collect() - }, + } CoreConcreteLibfunc::Nullable(libfunc) => match libfunc { NullableConcreteLibfunc::Null(_) => vec![steps(0).into()], NullableConcreteLibfunc::NullableFromBox(_) => vec![steps(0).into()], diff --git a/crates/cairo-lang-sierra-gas/src/lib.rs b/crates/cairo-lang-sierra-gas/src/lib.rs index 799f314d9c3..7f2d2ec948a 100644 --- a/crates/cairo-lang-sierra-gas/src/lib.rs +++ b/crates/cairo-lang-sierra-gas/src/lib.rs @@ -21,9 +21,9 @@ use itertools::Itertools; use objects::CostInfoProvider; use thiserror::Error; +mod cheatcodes_libfunc_cost_base; pub mod compute_costs; pub mod core_libfunc_cost; -mod cheatcodes_libfunc_cost_base; mod core_libfunc_cost_base; mod core_libfunc_cost_expr; mod cost_expr; From 3e924e4fa50e867f2a6d70dfe4d5ab4b82b3b701 Mon Sep 17 00:00:00 2001 From: Karol Bisztyga Date: Thu, 11 May 2023 11:37:24 +0200 Subject: [PATCH 3/3] remove redundant import --- crates/cairo-lang-protostar/src/cli.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/cairo-lang-protostar/src/cli.rs b/crates/cairo-lang-protostar/src/cli.rs index e9bf9337707..726827c2041 100644 --- a/crates/cairo-lang-protostar/src/cli.rs +++ b/crates/cairo-lang-protostar/src/cli.rs @@ -1,7 +1,7 @@ //! Compiles and runs a Cairo program. use std::fs; -use anyhow::{anyhow, Context}; +use anyhow::Context; use cairo_lang_protostar::build_protostar_casm_from_sierra; use cairo_lang_protostar::test_collector::collect_tests; use clap::Parser;