Skip to content

Commit 5f10bce

Browse files
adding a test for divide_queries_ind_by_coset_size_to_fp_offset (#213)
1 parent 015420b commit 5f10bce

File tree

5 files changed

+85
-17
lines changed

5 files changed

+85
-17
lines changed

crates/cairo-program-runner-lib/src/hints/bootloader_hints.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ mod tests {
492492
use crate::hints::codes::*;
493493
use crate::hints::hint_processors::MinimalBootloaderHintProcessor;
494494
use crate::hints::types::{BootloaderConfig, SimpleBootloaderInput};
495-
use crate::test_utils::prepare_ids_data_for_test;
495+
use crate::test_utils::fill_ids_data_for_test;
496496
use cairo_vm::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData;
497497
use cairo_vm::hint_processor::builtin_hint_processor::hint_utils::get_maybe_relocatable_from_var_name;
498498
use cairo_vm::hint_processor::hint_processor_definition::HintProcessorLogic;
@@ -547,7 +547,7 @@ mod tests {
547547
.push(BuiltinRunner::Output(output_builtin.clone()));
548548

549549
let mut exec_scopes = ExecutionScopes::new();
550-
let ids_data = prepare_ids_data_for_test(&["simple_bootloader_output_start"]);
550+
let ids_data = fill_ids_data_for_test(&["simple_bootloader_output_start"]);
551551
let ap_tracking = ApTracking::new();
552552

553553
exec_scopes.insert_value(vars::BOOTLOADER_INPUT, bootloader_input);
@@ -685,7 +685,7 @@ mod tests {
685685
vm.set_fp(2);
686686

687687
let mut exec_scopes = ExecutionScopes::new();
688-
let ids_data = prepare_ids_data_for_test(&["bootloader_config"]);
688+
let ids_data = fill_ids_data_for_test(&["bootloader_config"]);
689689
let ap_tracking = ApTracking::new();
690690

691691
exec_scopes.insert_value(vars::BOOTLOADER_INPUT, bootloader_input);
@@ -833,7 +833,7 @@ mod tests {
833833
&[MaybeRelocatable::Int(Felt252::from(2))],
834834
);
835835

836-
let ids_data = prepare_ids_data_for_test(&["n_subtasks"]);
836+
let ids_data = fill_ids_data_for_test(&["n_subtasks"]);
837837

838838
let ap_tracking = ApTracking::default();
839839

@@ -1097,7 +1097,7 @@ mod tests {
10971097
vm.set_fp(2);
10981098

10991099
let ids_data =
1100-
prepare_ids_data_for_test(&["nested_subtasks_output_len", "nested_subtasks_output"]);
1100+
fill_ids_data_for_test(&["nested_subtasks_output_len", "nested_subtasks_output"]);
11011101

11021102
let mut exec_scopes = ExecutionScopes::new();
11031103

@@ -1169,7 +1169,7 @@ mod tests {
11691169
vm.segments.add();
11701170
vm.set_fp(2);
11711171

1172-
let ids_data = prepare_ids_data_for_test(&["program_address"]);
1172+
let ids_data = fill_ids_data_for_test(&["program_address"]);
11731173
let ap_tracking = ApTracking::new();
11741174

11751175
let mut ptr = Relocatable {

crates/cairo-program-runner-lib/src/hints/builtin_usage_hints.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ pub fn flexible_builtin_usage_from_input(
214214
#[cfg(test)]
215215
mod tests {
216216
use super::*;
217-
use crate::test_utils::prepare_ids_data_for_test;
217+
use crate::test_utils::fill_ids_data_for_test;
218218
use cairo_vm::serde::deserialize_program::OffsetValue;
219219
use cairo_vm::types::relocatable::MaybeRelocatable;
220220
use cairo_vm::types::relocatable::Relocatable;
@@ -252,7 +252,7 @@ mod tests {
252252
// local n_memory_holes;
253253
// local n_blake2s;
254254
let mut vm = VirtualMachine::new(false, false);
255-
let ids_data = prepare_ids_data_for_test(&[
255+
let ids_data = fill_ids_data_for_test(&[
256256
"n_output",
257257
"n_pedersen",
258258
"n_range_check",
@@ -282,7 +282,7 @@ mod tests {
282282
#[rstest(finalize, case(true), case(false))]
283283
fn test_builtin_usage_add_other_segment(finalize: bool) {
284284
let mut vm = VirtualMachine::new(false, false);
285-
let ids_data = prepare_ids_data_for_test(&["other_segment"]);
285+
let ids_data = fill_ids_data_for_test(&["other_segment"]);
286286
vm.segments.add();
287287
vm.segments.add();
288288
vm.set_fp(1);
@@ -311,7 +311,7 @@ mod tests {
311311
#[test]
312312
fn test_builtin_usage_add_signature() {
313313
let mut vm = VirtualMachine::new(false, false);
314-
let ids_data = prepare_ids_data_for_test(&["ecdsa_ptr"]);
314+
let ids_data = fill_ids_data_for_test(&["ecdsa_ptr"]);
315315
let ap_tracking = ApTracking::default();
316316
vm.segments.add();
317317
vm.segments.add();
@@ -395,7 +395,7 @@ mod tests {
395395
)]
396396
fn test_builtin_usage_set_pages_and_fact_topology(left_pedersen_hash: usize) {
397397
let mut vm = VirtualMachine::new(false, false);
398-
let ids_data = prepare_ids_data_for_test(&["output_ptr"]);
398+
let ids_data = fill_ids_data_for_test(&["output_ptr"]);
399399
let ap_tracking = ApTracking::default();
400400
vm.segments.add();
401401
vm.segments.add();

crates/cairo-program-runner-lib/src/hints/execute_task_hints.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -588,8 +588,8 @@ mod tests {
588588
use super::*;
589589
use crate::hints::codes::*;
590590
use crate::hints::types::{Cairo0Executable, Task};
591+
use crate::test_utils::{fill_ids_data_for_test, prepare_vm_for_load_program_loading_test};
591592
use crate::test_utils::{get_hint_codes_at_pc, prepare_non_continuous_ids_data_for_test};
592-
use crate::test_utils::{prepare_ids_data_for_test, prepare_vm_for_load_program_loading_test};
593593
use cairo_vm::any_box;
594594
use cairo_vm::hint_processor::builtin_hint_processor::builtin_hint_processor_definition::HintProcessorData;
595595
use cairo_vm::hint_processor::hint_processor_definition::HintProcessorLogic;
@@ -1124,7 +1124,7 @@ mod tests {
11241124
vm.set_ap(1);
11251125
let mut exec_scopes = ExecutionScopes::new();
11261126
exec_scopes.insert_value(vars::USE_PREV_HASH, use_prev_hash);
1127-
let ids_data = prepare_ids_data_for_test(&["use_prev_hash"]);
1127+
let ids_data = fill_ids_data_for_test(&["use_prev_hash"]);
11281128
let ap_tracking = ApTracking::new();
11291129
determine_use_prev_hash(&mut vm, &mut exec_scopes, &ids_data, &ap_tracking)
11301130
.expect("Hint failed unexpectedly");

crates/cairo-program-runner-lib/src/hints/fri_layer.rs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,73 @@ pub fn divide_queries_ind_by_coset_size_to_fp_offset(
6363
let dest = (vm.get_fp() + 1)?;
6464
Ok(vm.insert_value(dest, result)?)
6565
}
66+
67+
#[cfg(test)]
68+
mod test {
69+
use super::*;
70+
use crate::test_utils::fill_ids_data_for_test;
71+
use cairo_vm::types::relocatable::Relocatable;
72+
use cairo_vm::Felt252;
73+
use rstest::rstest;
74+
75+
/// This test checks the hint implementation of `divide_queries_ind_by_coset_size_to_fp_offset`.
76+
/// It tests that the hint correctly divides the query index by the coset size and stores the
77+
/// result in fp + 1.
78+
#[rstest]
79+
#[case(42, 7, 6)]
80+
#[case(100, 25, 4)]
81+
#[case(0, 5, 0)]
82+
fn test_divide_queries_ind_by_coset_size_to_fp_offset(
83+
#[case] index: u64,
84+
#[case] coset_size: u64,
85+
#[case] expected: u64,
86+
) {
87+
let mut vm = VirtualMachine::new(false, false);
88+
let mut ids_data = fill_ids_data_for_test(&["queries", "params"]);
89+
let ap_tracking = ApTracking::default();
90+
vm.add_memory_segment();
91+
vm.add_memory_segment();
92+
vm.add_memory_segment();
93+
vm.set_ap(2);
94+
vm.set_fp(2);
95+
96+
let queries_addr = Relocatable::from((2, 0));
97+
let params_addr = Relocatable::from((2, 3));
98+
let fp = vm.get_fp();
99+
vm.insert_value(
100+
Relocatable::from((fp.segment_index, fp.offset - 2)),
101+
MaybeRelocatable::from(queries_addr),
102+
)
103+
.expect("Failed to insert queries pointer");
104+
vm.insert_value(
105+
Relocatable::from((fp.segment_index, fp.offset - 1)),
106+
MaybeRelocatable::from(params_addr),
107+
)
108+
.expect("Failed to insert params pointer");
109+
110+
let _ = vm.segments.load_data(
111+
queries_addr,
112+
&[
113+
MaybeRelocatable::from(Felt252::from(index)), // index
114+
MaybeRelocatable::from(100), // y_value
115+
MaybeRelocatable::from(200), // x_inv_value
116+
],
117+
);
118+
let _ = vm.segments.load_data(
119+
params_addr,
120+
&[
121+
MaybeRelocatable::from(Felt252::from(coset_size)), // coset_size
122+
MaybeRelocatable::from(300), /* fri_group (pointer, not
123+
* used here) */
124+
MaybeRelocatable::from(400), // eval_point
125+
],
126+
);
127+
divide_queries_ind_by_coset_size_to_fp_offset(&mut vm, &mut ids_data, &ap_tracking)
128+
.expect("Failed to run hint");
129+
// Assert result at fp+1 is 42/7 = 6
130+
let fp = vm.get_fp();
131+
let result_addr = Relocatable::from((fp.segment_index, fp.offset + 1));
132+
let result = vm.get_integer(result_addr).expect("Failed to get result");
133+
assert_eq!(*result.as_ref(), Felt252::from(expected));
134+
}
135+
}

crates/cairo-program-runner-lib/src/test_utils.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,7 @@ pub fn prepare_refrences_for_test(num: i32) -> std::collections::HashMap<usize,
3535
/// "nameN": HintReference::new_simple(-1),
3636
/// }
3737
/// where num is the length of names.
38-
pub fn prepare_ids_data_for_test(
39-
names: &[&str],
40-
) -> std::collections::HashMap<String, HintReference> {
38+
pub fn fill_ids_data_for_test(names: &[&str]) -> std::collections::HashMap<String, HintReference> {
4139
let references = prepare_refrences_for_test(names.len() as i32);
4240
let mut ids_data = std::collections::HashMap::<String, HintReference>::new();
4341
for (i, name) in names.iter().enumerate() {
@@ -109,7 +107,7 @@ pub fn prepare_vm_for_load_program_loading_test(
109107
);
110108

111109
let ids_data =
112-
prepare_ids_data_for_test(&["program_segment_ptr", "program_header", "program_data_ptr"]);
110+
fill_ids_data_for_test(&["program_segment_ptr", "program_header", "program_data_ptr"]);
113111
let expected_program_data_segment_index = vm.segments.num_segments();
114112
let program_header_ptr = Relocatable::from((2, 0));
115113
let mut exec_scopes = ExecutionScopes::new();

0 commit comments

Comments
 (0)