diff --git a/proof-input/tests/sampling.rs b/proof-input/tests/sampling.rs new file mode 100644 index 0000000..192918f --- /dev/null +++ b/proof-input/tests/sampling.rs @@ -0,0 +1,70 @@ +use plonky2::hash::poseidon::PoseidonHash; +use plonky2::plonk::config::PoseidonGoldilocksConfig; +use plonky2_field::goldilocks_field::GoldilocksField; + +// types used in all tests +type F = GoldilocksField; +const D: usize = 2; +type H = PoseidonHash; +type C = PoseidonGoldilocksConfig; + + +#[cfg(test)] +mod sampling_tests { + use super::*; + use proof_input::input_generator::InputGenerator; + + // Test sample cells (non-circuit) + #[test] + fn test_gen_verify_proof(){ + let input_gen = InputGenerator::::default(); + let w = input_gen.gen_testing_circuit_input(); + assert!(input_gen.verify_circuit_input(w)); + } +} + +#[cfg(test)] +mod sampling_circuit_tests { + use super::*; + use std::time::Instant; + use plonky2::plonk::proof::ProofWithPublicInputs; + use codex_plonky2_circuits::circuit_helper::Plonky2Circuit; + use codex_plonky2_circuits::circuits::sample_cells::SampleCircuit; + use proof_input::input_generator::InputGenerator; + use proof_input::params::Params; + + // Test sample cells in-circuit for a selected slot + #[test] + fn test_proof_in_circuit() -> anyhow::Result<()> { + // get input + let mut params = Params::default(); + params.set_n_samples(10); + let input_params = params.input_params; + let circuit_params = params.circuit_params; + let input_gen = InputGenerator::::new(input_params); + let circ_input = input_gen.gen_testing_circuit_input(); + + // build the circuit + let circ = SampleCircuit::::new(circuit_params.clone()); + let (targets, data) = circ.build_with_standard_config()?; + println!("circuit size = {:?}", data.common.degree_bits()); + + // separate the prover and verifier + let verifier_data = data.verifier_data(); + let prover_data = data.prover_data(); + + // Prove the circuit using the circuit input + let start_time = Instant::now(); + let proof_with_pis: ProofWithPublicInputs = circ.prove(&targets, &circ_input, &prover_data)?; + println!("prove_time = {:?}", start_time.elapsed()); + + // Verify the proof + assert!( + verifier_data.verify(proof_with_pis).is_ok(), + "Merkle proof verification failed" + ); + + Ok(()) + } + +} \ No newline at end of file