From 0fc0a7c918e515ae15472efa5185c9d15620ece9 Mon Sep 17 00:00:00 2001 From: Arni Hod Date: Thu, 27 Jun 2024 18:40:02 +0300 Subject: [PATCH] test: expend compile test --- Cargo.lock | 1 + crates/starknet_sierra_compile/Cargo.toml | 1 + .../starknet_sierra_compile/src/compile_test.rs | 16 +++++++++++----- .../starknet_sierra_compile/src/test_utils.rs | 17 +++++++++++++++++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b990e505c..785a6cd7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5610,6 +5610,7 @@ dependencies = [ "cairo-lang-starknet-classes", "cairo-lang-utils", "num-bigint", + "rstest", "serde", "serde_json", "starknet_api", diff --git a/crates/starknet_sierra_compile/Cargo.toml b/crates/starknet_sierra_compile/Cargo.toml index 1925ae2ca..d3f9b4ec4 100644 --- a/crates/starknet_sierra_compile/Cargo.toml +++ b/crates/starknet_sierra_compile/Cargo.toml @@ -20,3 +20,4 @@ thiserror.workspace = true [dev-dependencies] assert_matches.workspace = true +rstest.workspace = true diff --git a/crates/starknet_sierra_compile/src/compile_test.rs b/crates/starknet_sierra_compile/src/compile_test.rs index 37d1f3739..fae536f67 100644 --- a/crates/starknet_sierra_compile/src/compile_test.rs +++ b/crates/starknet_sierra_compile/src/compile_test.rs @@ -2,9 +2,11 @@ use std::path::Path; use assert_matches::assert_matches; use cairo_lang_starknet_classes::allowed_libfuncs::AllowedLibfuncsError; +use cairo_lang_utils::bigint::BigUintAsHex; +use rstest::rstest; use crate::compile::{compile_sierra_to_casm, CompilationUtilError}; -use crate::test_utils::contract_class_from_file; +use crate::test_utils::{contract_class_from_file, flip_bit, trancate_sierra_program}; const FAULTY_ACCOUNT_SIERRA_FILE: &str = "account_faulty.sierra.json"; const TEST_FILES_FOLDER: &str = "./tests/fixtures"; @@ -22,13 +24,17 @@ fn test_compile_sierra_to_casm() { } // TODO(Arni, 1/5/2024): Add a test for panic result test. -#[test] -fn test_negative_flow_compile_sierra_to_casm() { +#[rstest] +fn test_negative_flow_compile_sierra_to_casm_short_program( + #[values(trancate_sierra_program, flip_bit)] modifier: fn( + &mut [BigUintAsHex], + ) -> Vec, +) { let sierra_path = &Path::new(TEST_FILES_FOLDER).join(FAULTY_ACCOUNT_SIERRA_FILE); let mut contract_class = contract_class_from_file(sierra_path); - // Truncate the sierra program to trigger an error. - contract_class.sierra_program = contract_class.sierra_program[..100].to_vec(); + // Modify the sierra program to trigger an error. + contract_class.sierra_program = modifier(&mut contract_class.sierra_program); let result = compile_sierra_to_casm(contract_class); assert_matches!( diff --git a/crates/starknet_sierra_compile/src/test_utils.rs b/crates/starknet_sierra_compile/src/test_utils.rs index dc0629d33..5a31456f6 100644 --- a/crates/starknet_sierra_compile/src/test_utils.rs +++ b/crates/starknet_sierra_compile/src/test_utils.rs @@ -31,3 +31,20 @@ pub(crate) fn contract_class_from_file(file: &Path) -> ContractClass { abi: None, } } + +// Ways to corrupt Sierra programs. +pub fn trancate_sierra_program(sierra_program: &mut [BigUintAsHex]) -> Vec { + let trancation_ammount = 100_usize; + + sierra_program[..trancation_ammount].to_vec() +} + +pub fn flip_bit(sierra_program: &mut [BigUintAsHex]) -> Vec { + let modified_felt = 100_usize; + let fliped_bit = 15; + + let mut value = sierra_program[modified_felt].value.clone(); + value.set_bit(fliped_bit, !value.bit(fliped_bit)); + sierra_program[modified_felt] = BigUintAsHex { value }; + sierra_program.to_vec() +}