binius_circuits/builder/
test_utils.rs

1// Copyright 2025 Irreducible Inc.
2
3use binius_core::constraint_system::{channel::Boundary, validate::validate_witness};
4
5use super::{types::F, ConstraintSystemBuilder};
6
7pub fn test_circuit(
8	build_circuit: fn(&mut ConstraintSystemBuilder) -> Result<Vec<Boundary<F>>, anyhow::Error>,
9) -> Result<(), anyhow::Error> {
10	let mut verifier_builder = ConstraintSystemBuilder::new();
11	let verifier_boundaries = build_circuit(&mut verifier_builder)?;
12	let verifier_constraint_system = verifier_builder.build()?;
13
14	let allocator = bumpalo::Bump::new();
15	let mut prover_builder = ConstraintSystemBuilder::new_with_witness(&allocator);
16	let prover_boundaries = build_circuit(&mut prover_builder)?;
17	let prover_witness = prover_builder.take_witness()?;
18	let _prover_constraint_system = prover_builder.build()?;
19
20	assert_eq!(verifier_boundaries, prover_boundaries);
21	validate_witness(&verifier_constraint_system, &verifier_boundaries, &prover_witness)?;
22	Ok(())
23}