openvm_native_recursion/
testing_utils.rs1use openvm_circuit::{arch::instructions::program::Program, utils::air_test_impl};
2use openvm_stark_backend::engine::VerificationData;
3use openvm_stark_sdk::{
4 config::baby_bear_poseidon2::BabyBearPoseidon2Config, p3_baby_bear::BabyBear,
5 utils::ProofInputForTest,
6};
7
8use crate::hints::InnerVal;
9
10type InnerSC = BabyBearPoseidon2Config;
11
12pub mod inner {
13 use openvm_native_circuit::{test_native_config, NativeCpuBuilder};
14 use openvm_native_compiler::conversion::CompilerOptions;
15 use openvm_stark_sdk::{
16 config::{
17 baby_bear_poseidon2::{BabyBearPoseidon2Config, BabyBearPoseidon2Engine},
18 FriParameters,
19 },
20 engine::{StarkFriEngine, VerificationDataWithFriParams},
21 };
22
23 use super::*;
24 use crate::{hints::Hintable, stark::VerifierProgram, types::new_from_inner_multi_vk};
25
26 pub fn build_verification_program(
27 vparams: VerificationDataWithFriParams<InnerSC>,
28 compiler_options: CompilerOptions,
29 ) -> (Program<BabyBear>, Vec<Vec<InnerVal>>) {
30 let VerificationDataWithFriParams { data, fri_params } = vparams;
31 let VerificationData { proof, vk } = data;
32
33 let advice = new_from_inner_multi_vk(&vk);
34 cfg_if::cfg_if! {
35 if #[cfg(feature = "metrics")] {
36 let start = std::time::Instant::now();
37 }
38 }
39 let program = VerifierProgram::build_with_options(advice, &fri_params, compiler_options);
40 #[cfg(feature = "metrics")]
41 metrics::gauge!("verify_program_compile_ms").set(start.elapsed().as_millis() as f64);
42
43 let mut input_stream = Vec::new();
44 input_stream.extend(proof.write());
45
46 (program, input_stream)
47 }
48
49 pub fn run_recursive_test(
56 test_proof_input: ProofInputForTest<BabyBearPoseidon2Config>,
57 fri_params: FriParameters,
58 ) {
59 let vparams = test_proof_input
60 .run_test(&BabyBearPoseidon2Engine::new(
61 FriParameters::new_for_testing(1),
62 ))
63 .unwrap();
64
65 let compiler_options = CompilerOptions::default();
66 let (program, witness_stream) = build_verification_program(vparams, compiler_options);
67 air_test_impl::<BabyBearPoseidon2Engine, _>(
68 fri_params,
69 NativeCpuBuilder,
70 test_native_config(),
71 program,
72 witness_stream,
73 1,
74 true,
75 )
76 .unwrap();
77 }
78}