openvm_circuit/arch/testing/program/
air.rs
1use openvm_stark_backend::{
2 interaction::InteractionBuilder,
3 p3_air::{Air, BaseAir},
4 p3_field::Field,
5 p3_matrix::Matrix,
6 rap::{BaseAirWithPublicValues, PartitionedBaseAir},
7};
8
9use super::ProgramTester;
10use crate::system::program::ProgramBus;
11
12#[derive(Clone, Copy, Debug, derive_new::new)]
13pub struct ProgramDummyAir {
14 pub bus: ProgramBus,
15}
16
17impl<F: Field> BaseAirWithPublicValues<F> for ProgramDummyAir {}
18impl<F: Field> PartitionedBaseAir<F> for ProgramDummyAir {}
19impl<F: Field> BaseAir<F> for ProgramDummyAir {
20 fn width(&self) -> usize {
21 ProgramTester::<F>::width()
22 }
23}
24
25impl<AB: InteractionBuilder> Air<AB> for ProgramDummyAir {
26 fn eval(&self, builder: &mut AB) {
27 let main = builder.main();
28 let local = main.row_slice(0);
29 let local = local.iter().map(|x| (*x).into()).collect::<Vec<AB::Expr>>();
30 self.bus.inner.add_key_with_lookups(
31 builder,
32 local[..local.len() - 1].iter().cloned(),
33 local[local.len() - 1].clone(),
34 );
35 }
36}