Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions crates/cairo-program-runner-lib/src/hints/vector_commitment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)));
}
}
Loading