Skip to content

Commit 737445f

Browse files
committed
Run tests through blockifier logic
commit-id:2777abe1
1 parent 09529f9 commit 737445f

File tree

13 files changed

+817
-218
lines changed

13 files changed

+817
-218
lines changed

crates/cheatnet/src/state.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,8 @@ impl Default for CheatnetState {
343343
ClassHash(TryFromHexStr::try_from_hex_str(TEST_CONTRACT_CLASS_HASH).unwrap());
344344
let test_call = Rc::new(RefCell::new(CallTrace {
345345
entry_point: test_code_entry_point.into(),
346-
run_with_call_header: true,
346+
// TODO this field could be removed entirely
347+
run_with_call_header: false,
347348
..CallTrace::default_successful_call()
348349
}));
349350
Self {

crates/forge-runner/src/package_tests.rs

+36
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
1+
use cairo_lang_sierra::extensions::NamedType;
2+
use cairo_lang_sierra::extensions::bitwise::BitwiseType;
3+
use cairo_lang_sierra::extensions::circuit::{AddModType, MulModType};
4+
use cairo_lang_sierra::extensions::ec::EcOpType;
5+
use cairo_lang_sierra::extensions::pedersen::PedersenType;
6+
use cairo_lang_sierra::extensions::poseidon::PoseidonType;
7+
use cairo_lang_sierra::extensions::range_check::{RangeCheck96Type, RangeCheckType};
8+
use cairo_lang_sierra::extensions::segment_arena::SegmentArenaType;
19
use cairo_lang_sierra::ids::GenericTypeId;
210
use cairo_lang_sierra::program::ProgramArtifact;
11+
use cairo_vm::types::builtin_name::BuiltinName;
312
use camino::Utf8PathBuf;
413
use std::sync::Arc;
514
use universal_sierra_compiler_api::AssembledProgramWithDebugInfo;
@@ -8,6 +17,20 @@ pub mod raw;
817
pub mod with_config;
918
pub mod with_config_resolved;
1019

20+
// If modifying this, make sure that the order of builtins matches that from
21+
// `#[implicit_precedence(...)` in generated test code.
22+
const BUILTIN_ORDER: [(BuiltinName, GenericTypeId); 9] = [
23+
(BuiltinName::pedersen, PedersenType::ID),
24+
(BuiltinName::range_check, RangeCheckType::ID),
25+
(BuiltinName::bitwise, BitwiseType::ID),
26+
(BuiltinName::ec_op, EcOpType::ID),
27+
(BuiltinName::poseidon, PoseidonType::ID),
28+
(BuiltinName::segment_arena, SegmentArenaType::ID),
29+
(BuiltinName::range_check96, RangeCheck96Type::ID),
30+
(BuiltinName::add_mod, AddModType::ID),
31+
(BuiltinName::mul_mod, MulModType::ID),
32+
];
33+
1134
#[derive(Debug, PartialEq, Clone, Copy, Hash, Eq)]
1235
pub enum TestTargetLocation {
1336
/// Main crate in a package
@@ -23,6 +46,19 @@ pub struct TestDetails {
2346
pub return_types: Vec<(GenericTypeId, i16)>,
2447
}
2548

49+
impl TestDetails {
50+
#[must_use]
51+
pub fn builtins(&self) -> Vec<BuiltinName> {
52+
let mut builtins = vec![];
53+
for (builtin_name, builtin_ty) in BUILTIN_ORDER {
54+
if self.parameter_types.iter().any(|(ty, _)| ty == &builtin_ty) {
55+
builtins.push(builtin_name);
56+
}
57+
}
58+
builtins
59+
}
60+
}
61+
2662
#[derive(Debug, Clone)]
2763
pub struct TestTarget<C> {
2864
pub tests_location: TestTargetLocation,

crates/forge-runner/src/package_tests/with_config_resolved.rs

+40
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,55 @@
11
use super::{TestCase, TestTarget};
22
use crate::expected_result::ExpectedTestResult;
3+
use crate::running::hints_to_params;
4+
use anyhow::Result;
5+
use cairo_vm::serde::deserialize_program::ReferenceManager;
6+
use cairo_vm::types::program::Program;
7+
use cairo_vm::types::relocatable::MaybeRelocatable;
38
use cheatnet::runtime_extensions::forge_config_extension::config::{
49
RawAvailableGasConfig, RawFuzzerConfig,
510
};
611
use starknet_api::block::BlockNumber;
12+
use starknet_types_core::felt::Felt;
13+
use std::collections::HashMap;
14+
use universal_sierra_compiler_api::AssembledProgramWithDebugInfo;
715
use url::Url;
816

917
pub type TestTargetWithResolvedConfig = TestTarget<TestCaseResolvedConfig>;
1018

1119
pub type TestCaseWithResolvedConfig = TestCase<TestCaseResolvedConfig>;
1220

21+
impl TestCaseWithResolvedConfig {
22+
pub fn try_into_program(
23+
&self,
24+
casm_program: &AssembledProgramWithDebugInfo,
25+
) -> Result<Program> {
26+
let builtins = self.test_details.builtins();
27+
28+
let assembled_program = &casm_program.assembled_cairo_program;
29+
let hints_dict = hints_to_params(assembled_program);
30+
let data: Vec<MaybeRelocatable> = assembled_program
31+
.bytecode
32+
.iter()
33+
.map(Felt::from)
34+
.map(MaybeRelocatable::from)
35+
.collect();
36+
37+
Program::new(
38+
builtins.clone(),
39+
data,
40+
Some(0),
41+
hints_dict,
42+
ReferenceManager {
43+
references: Vec::new(),
44+
},
45+
HashMap::new(),
46+
vec![],
47+
None,
48+
)
49+
.map_err(std::convert::Into::into)
50+
}
51+
}
52+
1353
#[derive(Debug, Clone, PartialEq)]
1454
pub struct ResolvedForkConfig {
1555
pub url: Url,

0 commit comments

Comments
 (0)