Skip to content

Commit 49e09a8

Browse files
committed
add test to filling holes
1 parent 33d75ca commit 49e09a8

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
%builtins poseidon
2+
from starkware.cairo.common.cairo_builtins import PoseidonBuiltin
3+
from starkware.cairo.common.poseidon_state import PoseidonBuiltinState
4+
5+
func main{poseidon_ptr: PoseidonBuiltin*}() {
6+
assert poseidon_ptr[0].input = PoseidonBuiltinState(1, 2, 3);
7+
let result = poseidon_ptr[0].output;
8+
let poseidon_ptr = poseidon_ptr + PoseidonBuiltin.SIZE;
9+
assert result.s0 = 442682200349489646213731521593476982257703159825582578145778919623645026501;
10+
assert result.s2 = 2512222140811166287287541003826449032093371832913959128171347018667852712082;
11+
return ();
12+
}

vm/src/vm/runners/cairo_runner.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5696,6 +5696,42 @@ mod tests {
56965696
assert!(cairo_runner.vm.segments.memory.data[8].len() as u32 % CELLS_PER_KECCAK == 0);
56975697
}
56985698

5699+
#[test]
5700+
// TODO(Stav): add another test that checks filling holes in the middle of the segment.
5701+
fn end_run_fill_middle_holes() {
5702+
let program = Program::from_bytes(
5703+
include_bytes!("../../../../cairo_programs/proof_programs/poseidon_builtin_hole.json"),
5704+
Some("main"),
5705+
)
5706+
.unwrap();
5707+
5708+
let mut hint_processor = BuiltinHintProcessor::new_empty();
5709+
let mut cairo_runner = cairo_runner!(program, LayoutName::all_cairo, true, true);
5710+
5711+
let end = cairo_runner.initialize(false).unwrap();
5712+
cairo_runner
5713+
.run_until_pc(end, &mut hint_processor)
5714+
.expect("Call to `CairoRunner::run_until_pc()` failed.");
5715+
5716+
// Before end run
5717+
assert!(cairo_runner.vm.segments.memory.data[9][4].is_none());
5718+
5719+
assert_matches!(
5720+
cairo_runner.end_run(false, false, &mut hint_processor),
5721+
Ok(())
5722+
);
5723+
5724+
// After end run
5725+
assert!(!cairo_runner.vm.segments.memory.data[9][4].is_none());
5726+
5727+
// // Check prover input info
5728+
let prover_input = cairo_runner
5729+
.get_prover_input_info()
5730+
.expect("Failed to get prover input info");
5731+
assert!(prover_input.relocatable_memory[9][4].is_some());
5732+
assert!(prover_input.builtins_segments.get(&9) == Some(&BuiltinName::poseidon));
5733+
}
5734+
56995735
#[rstest]
57005736
#[case(include_bytes!("../../../../cairo_programs/proof_programs/fibonacci.json"))]
57015737
#[case(include_bytes!("../../../../cairo_programs/proof_programs/bitwise_output.json"))]

0 commit comments

Comments
 (0)