Skip to content

Commit 63a7bc1

Browse files
Refactor unit tests [3/3] (#1540)
* Refactor of tests in sierra-emu * Refacor of unit tests in types/array.rs * Refactor of tests for types/felt252_dict.rs * Refactor of remaining unit tests * Increment coverage partitions * Revert "Increment coverage partitions" This reverts commit 9af42cc. * Fix clippy * Remove unused dependency * Compile debug_utils programs when running tests * Fix path for sierra-emu make target * Modify script so it only runs debug_utils tests * Remove missing load_cairo * Remove debug println statement from load_program * Add missing final newlines to Cairo test files * Fix type tests to use get_compiled_program --------- Co-authored-by: gabrielbosio <gabrielbosio95@gmail.com> Co-authored-by: Gabriel Bosio <38794644+gabrielbosio@users.noreply.github.com>
1 parent 5211f12 commit 63a7bc1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+312
-354
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

debug_utils/sierra-emu/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ smallvec.workspace = true
3939
starknet-crypto.workspace = true
4040
starknet-curve.workspace = true
4141
starknet-types-core.workspace = true
42-
tempfile.workspace = true
4342
thiserror.workspace = true
4443
tracing.workspace = true
4544
tracing-subscriber = { workspace = true, features = ["env-filter"] }

debug_utils/sierra-emu/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ check:
1717
.PHONY: check
1818

1919
test:
20+
python3 ../../scripts/compile_test_data.py --mode sierra-emu
2021
cargo test --all-features
2122
.PHONY: test
2223

2324
test-no-corelib:
25+
python3 ../../scripts/compile_test_data.py --mode sierra-emu
2426
cargo test --all-features -- --skip test_corelib
2527
.PHONY: test-no-corelib
2628

Lines changed: 10 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,10 @@
11
#![cfg(test)]
22

3-
use std::{fs, path::Path, sync::Arc};
4-
5-
use cairo_lang_compiler::{
6-
compile_prepared_db, db::RootDatabase, diagnostics::DiagnosticsReporter,
7-
project::setup_project, CompilerConfig,
8-
};
9-
use cairo_lang_filesystem::{db::init_dev_corelib, ids::CrateInput};
10-
use cairo_lang_sierra::program::Program;
3+
use cairo_lang_sierra::program::{Program, VersionedProgram};
4+
use std::{fs, sync::Arc};
115

126
use crate::{starknet::StubSyscallHandler, Value, VirtualMachine};
137

14-
#[macro_export]
15-
macro_rules! load_cairo {
16-
( $( $program:tt )+ ) => {
17-
$crate::test_utils::load_cairo_from_str(stringify!($($program)+))
18-
};
19-
}
20-
21-
pub(crate) fn load_cairo_from_str(cairo_str: &str) -> (String, Program) {
22-
let mut file = tempfile::Builder::new()
23-
.prefix("test_")
24-
.suffix(".cairo")
25-
.tempfile()
26-
.unwrap();
27-
let mut db = RootDatabase::default();
28-
29-
fs::write(&mut file, cairo_str).unwrap();
30-
31-
init_dev_corelib(
32-
&mut db,
33-
Path::new(&std::env::var("CARGO_MANIFEST_DIR").unwrap()).join("corelib/src"),
34-
);
35-
36-
let main_crate_ids = {
37-
let crate_inputs = setup_project(&mut db, file.path()).unwrap();
38-
CrateInput::into_crate_ids(&db, crate_inputs)
39-
};
40-
41-
let sierra_with_dbg = compile_prepared_db(
42-
&db,
43-
main_crate_ids,
44-
CompilerConfig {
45-
diagnostics_reporter: DiagnosticsReporter::stderr(),
46-
replace_ids: true,
47-
..Default::default()
48-
},
49-
)
50-
.unwrap();
51-
52-
let module_name = file.path().with_extension("");
53-
let module_name = module_name.file_name().unwrap().to_str().unwrap();
54-
(module_name.to_string(), sierra_with_dbg.program)
55-
}
56-
578
pub fn run_test_program(sierra_program: Program) -> Vec<Value> {
589
let function = sierra_program
5910
.funcs
@@ -85,3 +36,11 @@ pub fn run_test_program(sierra_program: Program) -> Vec<Value> {
8536
.cloned()
8637
.collect()
8738
}
39+
40+
pub fn load_program(path: &str) -> Program {
41+
let program_path = format!("{}/../../{}.sierra.json", env!("CARGO_MANIFEST_DIR"), path);
42+
let versioned_program =
43+
serde_json::from_str::<VersionedProgram>(&fs::read_to_string(program_path).unwrap())
44+
.unwrap();
45+
versioned_program.into_v1().unwrap().program
46+
}

debug_utils/sierra-emu/src/vm/bounded_int.rs

Lines changed: 7 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -292,50 +292,20 @@ pub fn eval_trim(
292292
#[cfg(test)]
293293
mod tests {
294294

295-
use num_bigint::BigInt;
296-
297295
use super::Value;
298-
299-
use crate::{load_cairo, test_utils::run_test_program};
296+
use crate::test_utils::{load_program, run_test_program};
297+
use num_bigint::BigInt;
300298

301299
#[test]
302300
fn test_bounded_int_sub() {
303-
let (_, program) = load_cairo!(
304-
#[feature("bounded-int-utils")]
305-
use core::internal::bounded_int::{self, SubHelper, BoundedInt};
306-
307-
impl U8BISub of SubHelper<u8, u8> {
308-
type Result = BoundedInt<-255, 255>;
309-
}
310-
311-
extern fn bounded_int_sub<Lhs, Rhs, impl H: SubHelper<Lhs, Rhs>>(
312-
lhs: Lhs, rhs: Rhs,
313-
) -> H::Result nopanic;
314-
315-
fn main() -> BoundedInt<-255, 255> {
316-
bounded_int_sub(0_u8, 255_u8)
317-
}
318-
);
301+
let program = load_program("test_data_artifacts/programs/debug_utils/bounded_int_sub");
319302

320303
run_test_program(program);
321304
}
322305

323306
#[test]
324307
fn test_trim_i8() {
325-
let (_, program) = load_cairo!(
326-
#[feature("bounded-int-utils")]
327-
use core::internal::bounded_int::{self, BoundedInt};
328-
use core::internal::OptionRev;
329-
330-
fn main() -> BoundedInt<-127, 127> {
331-
let num = match bounded_int::trim_min::<i8>(1) {
332-
OptionRev::Some(n) => n,
333-
OptionRev::None => 1,
334-
};
335-
336-
num
337-
}
338-
);
308+
let program = load_program("test_data_artifacts/programs/debug_utils/bounded_int_trim_i8");
339309

340310
let result = run_test_program(program);
341311
let result = result.last().unwrap();
@@ -349,20 +319,7 @@ mod tests {
349319

350320
#[test]
351321
fn test_trim_u32() {
352-
let (_, program) = load_cairo!(
353-
#[feature("bounded-int-utils")]
354-
use core::internal::bounded_int::{self, BoundedInt};
355-
use core::internal::OptionRev;
356-
357-
fn main() -> BoundedInt<0, 4294967294> {
358-
let num = match bounded_int::trim_max::<u32>(0xfffffffe) {
359-
OptionRev::Some(n) => n,
360-
OptionRev::None => 0,
361-
};
362-
363-
num
364-
}
365-
);
322+
let program = load_program("test_data_artifacts/programs/debug_utils/bounded_int_trim_u32");
366323

367324
let result = run_test_program(program);
368325
let result = result.last().unwrap();
@@ -376,20 +333,8 @@ mod tests {
376333

377334
#[test]
378335
fn test_trim_none() {
379-
let (_, program) = load_cairo!(
380-
#[feature("bounded-int-utils")]
381-
use core::internal::bounded_int::{self, BoundedInt};
382-
use core::internal::OptionRev;
383-
384-
fn main() -> BoundedInt<-32767, 32767> {
385-
let num = match bounded_int::trim_min::<i16>(-0x8000) {
386-
OptionRev::Some(n) => n,
387-
OptionRev::None => 0,
388-
};
389-
390-
num
391-
}
392-
);
336+
let program =
337+
load_program("test_data_artifacts/programs/debug_utils/bounded_int_trim_none");
393338

394339
let result = run_test_program(program);
395340
let result = result.last().unwrap();

debug_utils/sierra-emu/src/vm/int.rs

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -432,17 +432,14 @@ fn eval_byte_reverse(
432432

433433
#[cfg(test)]
434434
mod test {
435-
use crate::{load_cairo, test_utils::run_test_program, Value};
435+
use crate::{
436+
test_utils::{load_program, run_test_program},
437+
Value,
438+
};
436439

437440
#[test]
438441
fn test_diff_14_m2() {
439-
let (_, program) = load_cairo!(
440-
pub extern fn i8_diff(lhs: i8, rhs: i8) -> Result<u8, u8> implicits(RangeCheck) nopanic;
441-
442-
fn main() -> Result<u8, u8> {
443-
i8_diff(14, -2)
444-
}
445-
);
442+
let program = load_program("test_data_artifacts/programs/debug_utils/int_diff_14_m2");
446443

447444
let result = run_test_program(program);
448445
let result = result.last().unwrap();
@@ -456,13 +453,7 @@ mod test {
456453

457454
#[test]
458455
fn test_diff_m14_m2() {
459-
let (_, program) = load_cairo!(
460-
pub extern fn i8_diff(lhs: i8, rhs: i8) -> Result<u8, u8> implicits(RangeCheck) nopanic;
461-
462-
fn main() -> Result<u8, u8> {
463-
i8_diff(-14, -2)
464-
}
465-
);
456+
let program = load_program("test_data_artifacts/programs/debug_utils/int_diff_m14_m2");
466457

467458
let result = run_test_program(program);
468459
let result = result.last().unwrap();
@@ -476,13 +467,7 @@ mod test {
476467

477468
#[test]
478469
fn test_diff_m2_0() {
479-
let (_, program) = load_cairo!(
480-
pub extern fn i8_diff(lhs: i8, rhs: i8) -> Result<u8, u8> implicits(RangeCheck) nopanic;
481-
482-
fn main() -> Result<u8, u8> {
483-
i8_diff(-2, 0)
484-
}
485-
);
470+
let program = load_program("test_data_artifacts/programs/debug_utils/int_diff_m2_0");
486471

487472
let result = run_test_program(program);
488473
let result = result.last().unwrap();
@@ -496,13 +481,7 @@ mod test {
496481

497482
#[test]
498483
fn test_diff_2_10() {
499-
let (_, program) = load_cairo!(
500-
pub extern fn i8_diff(lhs: i8, rhs: i8) -> Result<u8, u8> implicits(RangeCheck) nopanic;
501-
502-
fn main() -> Result<u8, u8> {
503-
i8_diff(2, 10)
504-
}
505-
);
484+
let program = load_program("test_data_artifacts/programs/debug_utils/int_diff_2_10");
506485

507486
let result = run_test_program(program);
508487
let result = result.last().unwrap();

scripts/compile_test_data.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import os
22
import subprocess
3+
import argparse
34

4-
src_root = "test_data"
5-
dst_root = "test_data_artifacts"
5+
parser = argparse.ArgumentParser()
6+
parser.add_argument("--mode", help="Defines which cairo files to compile")
7+
args = parser.parse_args()
68

79
subprocess.run(
810
[
@@ -26,13 +28,13 @@ def get_dst_path(src_path):
2628
return dst_path
2729

2830

29-
def compile_cairo_project(src_path):
31+
def compile_cairo_project(src_path, binary_path):
3032
dst_path = get_dst_path(src_path)
3133

3234
print(f"compiling project {src_path} into {dst_path}")
3335
subprocess.run(
3436
[
35-
"target/debug/compile-cairo-project",
37+
binary_path,
3638
src_path,
3739
dst_path + ".sierra.json",
3840
dst_path + ".sierra",
@@ -82,8 +84,15 @@ def walk(subdir, f):
8284
filepath = os.path.join(dirpath, filename)
8385
f(filepath)
8486

85-
86-
walk("programs", lambda p: compile_cairo_project(p))
87-
walk("contracts", lambda p: compile_cairo_contract(p))
88-
walk("tests", lambda p: compile_cairo_tests(p, starknet=False))
89-
walk("tests_starknet", lambda p: compile_cairo_tests(p, starknet=True))
87+
88+
if args.mode == "sierra-emu":
89+
src_root = "../../test_data"
90+
dst_root = "../../test_data_artifacts"
91+
walk("programs/debug_utils", lambda p: compile_cairo_project(p, "../../target/debug/compile-cairo-project"))
92+
else:
93+
src_root = "test_data"
94+
dst_root = "test_data_artifacts"
95+
walk("programs", lambda p: compile_cairo_project(p, "target/debug/compile-cairo-project"))
96+
walk("contracts", lambda p: compile_cairo_contract(p))
97+
walk("tests", lambda p: compile_cairo_tests(p, starknet=False))
98+
walk("tests_starknet", lambda p: compile_cairo_tests(p, starknet=True))

src/cache/aot.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,19 +87,15 @@ where
8787
#[cfg(test)]
8888
mod tests {
8989
use super::*;
90-
use crate::{load_cairo, values::Value};
90+
use crate::{utils::testing::load_program, values::Value};
9191
use starknet_types_core::felt::Felt;
9292

9393
#[test]
9494
fn test_aot_compile_and_insert() {
9595
let native_context = NativeContext::new();
9696
let mut cache = AotProgramCache::new(&native_context);
9797

98-
let (_, program) = load_cairo! {
99-
fn run_test() -> felt252 {
100-
42
101-
}
102-
};
98+
let program = load_program("test_data_artifacts/programs/aot_program");
10399

104100
let function_id = &program.funcs.first().expect("should have a function").id;
105101
let executor = cache.compile_and_insert((), &program, OptLevel::default());

src/executor.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -704,27 +704,16 @@ fn parse_result(
704704
mod tests {
705705
use super::*;
706706
use crate::{
707-
context::NativeContext, include_contract, load_cairo, starknet_stub::StubSyscallHandler,
708-
OptLevel,
707+
context::NativeContext, include_contract, starknet_stub::StubSyscallHandler,
708+
utils::testing::load_program, OptLevel,
709709
};
710710
use cairo_lang_sierra::program::Program;
711711
use rstest::*;
712712
use starknet_types_core::felt::Felt;
713713

714714
#[fixture]
715715
fn program() -> Program {
716-
let (_, program) = load_cairo! {
717-
use starknet::{SyscallResultTrait, get_block_hash_syscall};
718-
719-
fn run_test() -> felt252 {
720-
42
721-
}
722-
723-
fn get_block_hash() -> felt252 {
724-
get_block_hash_syscall(1).unwrap_syscall()
725-
}
726-
};
727-
program
716+
load_program("test_data_artifacts/programs/executor_program")
728717
}
729718

730719
#[fixture]

0 commit comments

Comments
 (0)