From bc24678026246e87a45f34c37f30c1f6be958866 Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Thu, 27 Jul 2023 11:26:43 -0400 Subject: [PATCH 1/4] Fix name in ID --- plonky2/src/gates/lookup_table.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plonky2/src/gates/lookup_table.rs b/plonky2/src/gates/lookup_table.rs index f3ed842d..9f9d967e 100644 --- a/plonky2/src/gates/lookup_table.rs +++ b/plonky2/src/gates/lookup_table.rs @@ -81,7 +81,7 @@ impl, const D: usize> Gate for LookupTableGat fn id(&self) -> String { // Custom implementation to not have the entire lookup table format!( - "LookupGate {{num_slots: {}, lut_hash: {:?}, last_lut_row: {}}}", + "LookupTableGate {{num_slots: {}, lut_hash: {:?}, last_lut_row: {}}}", self.num_slots, self.lut_hash, self.last_lut_row ) } From dc70902f36577ea923b649e01c2d913d9e05295a Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Thu, 27 Jul 2023 11:27:28 -0400 Subject: [PATCH 2/4] Remove always true condition --- plonky2/src/gadgets/lookup.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plonky2/src/gadgets/lookup.rs b/plonky2/src/gadgets/lookup.rs index cc60cbe7..b71b7808 100644 --- a/plonky2/src/gadgets/lookup.rs +++ b/plonky2/src/gadgets/lookup.rs @@ -77,7 +77,7 @@ impl, const D: usize> CircuitBuilder { pub fn add_all_lookups(&mut self) { for lut_index in 0..self.num_luts() { assert!( - !self.get_lut_lookups(lut_index).is_empty() || lut_index >= self.get_luts_length(), + !self.get_lut_lookups(lut_index).is_empty(), "LUT number {:?} is unused", lut_index ); From 0276446e7a472b8ec553a271c5f0205ce007310e Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Thu, 27 Jul 2023 12:22:51 -0400 Subject: [PATCH 3/4] Add additional lookup unit tests --- plonky2/src/lookup_test.rs | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/plonky2/src/lookup_test.rs b/plonky2/src/lookup_test.rs index 04b57203..c575417e 100644 --- a/plonky2/src/lookup_test.rs +++ b/plonky2/src/lookup_test.rs @@ -40,6 +40,49 @@ mod tests { Ok(()) } + #[should_panic] + #[test] + fn test_lookup_table_not_used() { + LOGGER_INITIALIZED.call_once(|| init_logger().unwrap()); + use crate::plonk::circuit_builder::CircuitBuilder; + use crate::plonk::circuit_data::CircuitConfig; + use crate::plonk::config::{GenericConfig, PoseidonGoldilocksConfig}; + + const D: usize = 2; + type C = PoseidonGoldilocksConfig; + type F = >::F; + + let config = CircuitConfig::standard_recursion_config(); + let mut builder = CircuitBuilder::::new(config); + + let tip5_table = TIP5_TABLE.to_vec(); + let table: LookupTable = Arc::new((0..256).zip_eq(tip5_table).collect()); + builder.add_lookup_table_from_pairs(table); + + builder.build::(); + } + + #[should_panic] + #[test] + fn test_lookup_without_table() { + LOGGER_INITIALIZED.call_once(|| init_logger().unwrap()); + use crate::plonk::circuit_builder::CircuitBuilder; + use crate::plonk::circuit_data::CircuitConfig; + use crate::plonk::config::{GenericConfig, PoseidonGoldilocksConfig}; + + const D: usize = 2; + type C = PoseidonGoldilocksConfig; + type F = >::F; + + let config = CircuitConfig::standard_recursion_config(); + let mut builder = CircuitBuilder::::new(config); + + let dummy = builder.add_virtual_target(); + builder.add_lookup_from_index(dummy, 0); + + builder.build::(); + } + // Tests two lookups in one lookup table. #[test] fn test_one_lookup() -> anyhow::Result<()> { From ee9cd80cb4f89713a20518ca1e5d0750646251be Mon Sep 17 00:00:00 2001 From: Robin Salen Date: Thu, 27 Jul 2023 12:45:25 -0400 Subject: [PATCH 4/4] Change arg to non-mutable reference --- plonky2/src/plonk/circuit_builder.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plonky2/src/plonk/circuit_builder.rs b/plonky2/src/plonk/circuit_builder.rs index d8f9e32c..3cf48de0 100644 --- a/plonky2/src/plonk/circuit_builder.rs +++ b/plonky2/src/plonk/circuit_builder.rs @@ -244,7 +244,7 @@ impl, const D: usize> CircuitBuilder { self.lut_to_lookups[lut_index].push((looking_in, looking_out)); } - pub fn num_luts(&mut self) -> usize { + pub fn num_luts(&self) -> usize { self.lut_to_lookups.len() }