use openvm_stark_backend::prover::{
error::StackedPcsError, stacked_pcs::StackedLayout, ColMajorMatrix,
};
use crate::merkle::CpuMerkleTree;
#[derive(Clone, Debug)]
#[allow(dead_code)]
pub struct CpuStackedPcsData<F, Digest> {
pub layout: StackedLayout,
pub matrix: ColMajorMatrix<F>,
pub tree: CpuMerkleTree<F, Digest>,
}
impl<F, Digest: Clone> CpuStackedPcsData<F, Digest> {
pub fn new(
layout: StackedLayout,
matrix: ColMajorMatrix<F>,
tree: CpuMerkleTree<F, Digest>,
) -> Self {
Self {
layout,
matrix,
tree,
}
}
pub fn commit(&self) -> Result<Digest, StackedPcsError> {
self.tree.root()
}
}
#[cfg(test)]
mod tests {
use p3_matrix::dense::RowMajorMatrix;
use super::*;
#[test]
fn test_cpu_stacked_pcs_data_commit() {
let layout = StackedLayout::new(0, 1, vec![(1, 1)]).unwrap();
let matrix = ColMajorMatrix::new(vec![1u32, 2], 1);
let rm = RowMajorMatrix::new(vec![10u32, 20], 1);
let digest_layers = vec![vec![100u32], vec![42]];
let tree = unsafe { CpuMerkleTree::from_raw_parts(rm, digest_layers, 2) };
let data = CpuStackedPcsData::new(layout, matrix, tree);
assert_eq!(data.commit().unwrap(), 42);
}
}