1#[cfg(test)]
2mod tests {
3 use crate::{
4 lookups::{Lookup, LookupTableIDs},
5 proof::ProofInputs,
6 prover::prove,
7 verifier::verify,
8 witness::Witness,
9 BaseSponge, Fp, OpeningProof, ScalarSponge, BN254,
10 };
11 use ark_ff::UniformRand;
12 use kimchi::circuits::domains::EvaluationDomains;
13 use poly_commitment::{kzg::PairingSRS, SRS as _};
14
15 const LOOKUP_TEST_N_COL: usize = 10;
17
18 #[test]
19 #[ignore]
20 fn test_soundness_logup() {
21 let mut rng = o1_utils::tests::make_test_rng(None);
22
23 let domain_size = 1 << 8;
25 let domain = EvaluationDomains::<Fp>::create(domain_size).unwrap();
26
27 let srs: PairingSRS<BN254> = { PairingSRS::create(domain.d1.size as usize) };
28 srs.full_srs.get_lagrange_basis(domain.d1);
29
30 let mut inputs = ProofInputs::random(domain);
31 let constraints = vec![];
32 let test_table_id = *inputs.logups.first_key_value().unwrap().0;
34 let looked_up_values = inputs.logups.get_mut(&test_table_id).unwrap().f[0].clone();
35 let wrong_looked_up_value = Lookup {
37 table_id: looked_up_values[0].table_id,
38 numerator: looked_up_values[0].numerator,
39 value: vec![Fp::rand(&mut rng)],
40 };
41 inputs.logups.get_mut(&test_table_id).unwrap().f[0][0] = wrong_looked_up_value;
43 let proof = prove::<
45 _,
46 OpeningProof,
47 BaseSponge,
48 ScalarSponge,
49 _,
50 LOOKUP_TEST_N_COL,
51 LOOKUP_TEST_N_COL,
52 0,
53 0,
54 LookupTableIDs,
55 >(domain, &srs, &constraints, Box::new([]), inputs, &mut rng)
56 .unwrap();
57 let verifies = verify::<
58 _,
59 OpeningProof,
60 BaseSponge,
61 ScalarSponge,
62 LOOKUP_TEST_N_COL,
63 LOOKUP_TEST_N_COL,
64 0,
65 0,
66 0,
67 LookupTableIDs,
68 >(
69 domain,
70 &srs,
71 &constraints,
72 Box::new([]),
73 &proof,
74 Witness::zero_vec(domain_size),
75 );
76 assert!(!verifies);
78 }
79}