openvm_circuit/utils/
test_utils.rs
1use std::array;
2
3use openvm_stark_backend::p3_field::PrimeField32;
4use rand::{rngs::StdRng, Rng};
5
6pub fn i32_to_f<F: PrimeField32>(val: i32) -> F {
7 if val.signum() == -1 {
8 -F::from_canonical_u32(val.unsigned_abs())
9 } else {
10 F::from_canonical_u32(val as u32)
11 }
12}
13
14pub fn generate_long_number<const NUM_LIMBS: usize, const LIMB_BITS: usize>(
15 rng: &mut StdRng,
16) -> [u32; NUM_LIMBS] {
17 array::from_fn(|_| rng.gen_range(0..(1 << LIMB_BITS)))
18}
19
20pub fn u32_into_limbs<const NUM_LIMBS: usize, const LIMB_BITS: usize>(
22 num: u32,
23) -> [u32; NUM_LIMBS] {
24 array::from_fn(|i| (num >> (LIMB_BITS * i)) & ((1 << LIMB_BITS) - 1))
25}
26
27pub fn u32_sign_extend<const IMM_BITS: usize>(num: u32) -> u32 {
28 if num & (1 << (IMM_BITS - 1)) != 0 {
29 num | (u32::MAX - (1 << IMM_BITS) + 1)
30 } else {
31 num
32 }
33}