diff --git a/crates/cairo-program-runner-lib/src/hints/vector_commitment.rs b/crates/cairo-program-runner-lib/src/hints/vector_commitment.rs index 8f0709af..8da563a3 100644 --- a/crates/cairo-program-runner-lib/src/hints/vector_commitment.rs +++ b/crates/cairo-program-runner-lib/src/hints/vector_commitment.rs @@ -37,3 +37,42 @@ pub fn set_bit_from_index( Ok(()) } + +#[cfg(test)] +mod tests { + use super::*; + use crate::test_utils::fill_ids_data_for_test; + use cairo_vm::hint_processor::builtin_hint_processor::hint_utils::get_maybe_relocatable_from_var_name; + use cairo_vm::types::relocatable::Relocatable; + use cairo_vm::Felt252; + use rstest::rstest; + + /// This test verifies that the `set_bit_from_index` hint correctly sets the bit + /// based on the least significant bit of the provided index. + #[rstest] + #[case(0)] + #[case(1)] + #[case(2)] + #[case(7)] + fn test_set_bit_from_index(#[case] index: u64) { + let mut vm = VirtualMachine::new(false, false); + vm.add_memory_segment(); + vm.add_memory_segment(); + vm.set_fp(2); + vm.set_ap(2); + + vm.load_data( + Relocatable::from((1, 0)), + &[MaybeRelocatable::Int(Felt252::from(index))], + ) + .expect("Failed to load data into VM memory"); + + let ids_data = fill_ids_data_for_test(&["current", "bit"]); + let ap_tracking = ApTracking::new(); + + set_bit_from_index(&mut vm, &ids_data, &ap_tracking).expect("Failed to set bit from index"); + let bit = get_maybe_relocatable_from_var_name("bit", &vm, &ids_data, &ap_tracking) + .expect("Failed to get bit from VM memory"); + assert_eq!(bit, MaybeRelocatable::Int(Felt252::from(index % 2))); + } +}