kimchi_msm/test/test_circuit/
columns.rs

1use crate::{
2    columns::{Column, ColumnIndexer},
3    N_LIMBS,
4};
5
6/// Number of columns in the test circuits, including fixed selectors.
7pub const N_COL_TEST: usize = 4 * N_LIMBS + N_FSEL_TEST;
8
9/// Number of fixed selectors in the test circuit.
10pub const N_FSEL_TEST: usize = 3;
11
12/// Test column indexer.
13#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
14pub enum TestColumn {
15    A(usize),
16    B(usize),
17    C(usize),
18    D(usize),
19    FixedSel1,
20    FixedSel2,
21    FixedSel3,
22}
23
24impl ColumnIndexer<usize> for TestColumn {
25    const N_COL: usize = N_COL_TEST;
26    fn to_column(self) -> Column<usize> {
27        let to_column_inner = |offset, i| {
28            assert!(i < N_LIMBS);
29            Column::Relation(N_LIMBS * offset + i)
30        };
31        match self {
32            TestColumn::A(i) => to_column_inner(0, i),
33            TestColumn::B(i) => to_column_inner(1, i),
34            TestColumn::C(i) => to_column_inner(2, i),
35            TestColumn::D(i) => to_column_inner(3, i),
36            TestColumn::FixedSel1 => Column::FixedSelector(0),
37            TestColumn::FixedSel2 => Column::FixedSelector(1),
38            TestColumn::FixedSel3 => Column::FixedSelector(2),
39        }
40    }
41}